0

JavaScript関数に関する質問がありました。関数としてプロパティとメソッドを追加できるオブジェクトとして関数を読みますが、プロパティを追加して関数をログアウトすると、奇妙な動作が発生します。ここでは、私がオブジェクトと関数で取り上げた小さな例を示します。オブジェクトとしてのJavaScript関数

//Object Example 
var obj = { 
    firstName: 'John', 
    lastName: 'Doe', 
}; 
obj.address = '111 Main St. New York, NY'; 
console.log(obj); // Object {firstName: "John", lastName: "Doe", address: "111 Main St. New York, NY"} 

//Function Example 
function myFunction() { 
    console.log('Hello World'); 
} 
myFunction.greet = 'Hello JavaScript!'; 
console.log(myFunction); // function myFunction() { console.log('Hello World');} 

予想したように、私はプロパティがプリントアウト表示されていないのMyFunctionをログアウト時に「挨拶」プロパティはMyFunctionのに追加されましたが。どうして?プロパティはどこに追加されましたか?一方、ドット演算子でプロパティにアクセスすると、結果がログアウトされます。

誰かがプロパティが追加された場所と保管場所を説明できますか?

+0

プロパティはありますが、 'console.log'で見ることはできません。異なるブラウザでは、表示方法が異なります。 – 4castle

答えて

1

関数のObject.keysで独自のプロパティを取得できます。

function myFunction() { 
 
    console.log('Hello World'); 
 
} 
 
myFunction.greet = 'Hello JavaScript!'; 
 

 
console.log(Object.keys(myFunction));

1

ブラウザは、変数が関数であることを見ているので、あなたは、変数をログアウトするとき、それは開発者にとって有用な方法で、コンソールにそれを印刷しようとします。通常は、関数を追加のプロパティを持つものとしては見ません。したがって、console.logを実装していても、その情報を表示しようとはしません。しかし、あなたがconsole.logから見ることは、言語の実際の仕組みには結びついていません。開発者にとって理解しやすいようにするだけです。これらのプロパティは、他のオブジェクトと同じように、同じ場所(RAM)に格納されます。

関連する問題