質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

778閲覧

JavaScriptオブジェクトメソッドの実行結果

maskmelon

総合スコア63

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/07/02 22:13

JavaScript

1var person = { 2 firstname: 'Default', 3 lastname : 'Default', 4 greet: function() { 5 return 'Hi ' + this.firstname; 6 } 7} 8 9var john = Object.create(person); 10john.firstname = 'John'; 11john.lastname = 'Doe'; 12john.greet();

nodeコマンドを実行した場合やJSコードを読み込んだhtmlファイルをブラウザで表示させた場合に、john.greet()の結果が表示されないのはなぜでしょうか?
なおブラウザのコンソール上でjohn.greet()を実行すると'Hi Jonh'という結果が表示されます。
このような違いが生じる理由が知りたいです。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

JavaScriptオブジェクトメソッドの実行結果

実行環境の違いですね。

ブラウザの開発者コンソールでは、実行された最後のステートメントの結果を表示します。
一方で ファイル指定で実行する NodeJS は、ソースコード内にコンソール出力が記述されていない限り、Terminal(コマンドプロンプト)に結果を表示することはありません。


例えば、ブラウザで以下のコードを実行すると、'Hi Jonh' と console.log() の内容が表示されますが、console.log の返り値(undefined)も続けて表示されるはずです。

javascript

1// test.js 2var person = { 3 firstname: 'Default', 4 lastname : 'Default', 5 greet: function() { 6 return 'Hi ' + this.firstname; 7 } 8} 9 10var john = Object.create(person); 11john.firstname = 'John'; 12john.lastname = 'Doe'; 13console.log( john.greet() ); // nodeでも console.log() の内容は表示する

このコードをファイルにし、nodeコマンドで実行すると、以下のように console.log() の内容が表示されます。

Terminal

1$ node test.js 2Hi Jonh

NodeJS も console.log を使って簡易的なデバッグができます(通常は debug モジュールが利用されます)


REPL(対話インタプリタ) では、開発者コンソールのように、ステートメントの結果を表示したりもします。

以下、REPLで実行し、ご質問のコードを貼り付けた例

Terminal

1$ node 2Welcome to Node.js v12.12.0. 3Type ".help" for more information. 4> var person = { 5... firstname: 'Default', 6... lastname : 'Default', 7... greet: function() { 8..... return 'Hi ' + this.firstname; 9..... } 10... } 11undefined 12> 13> var john = Object.create(person); 14undefined 15> john.firstname = 'John'; 16'John' 17> john.lastname = 'Doe'; 18'Doe' 19> john.greet(); 20'Hi John' 21> [Ctrl]+[C] 22(To exit, press ^C again or ^D or type .exit) 23> [Ctrl]+[C] (REPLを抜ける)

投稿2020/07/02 22:54

AkitoshiManabe

総合スコア5432

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maskmelon

2020/07/02 23:25

返り値とログ出力の違いがよく理解できました。丁寧な回答ありがとうございました。
guest

0

コンソールにで実行すれば、戻り値を自動的に表示されますが、nodeコマンドやHTMLではそうしていません。コンソールに何かを表示したいときはconsole.logを使ってください。

js

1var person = { 2 firstname: 'Default', 3 lastname : 'Default', 4 greet: function() { 5 console.log('Hi ' + this.firstname); 6 } 7}

投稿2020/07/02 22:55

YufanLou

総合スコア463

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問