2017-05-04 3 views
0

は、私は、プロパティの値が関数であるとき、我々はメソッドを呼び出すメソッドはプロパティのサブセットですか? JavaScriptをDefinitive GuideのからJavaScriptを学習で

を見ました。

Q1。メソッドはプロパティのサブセットですか?


Q2。文字列と数値(NOT Object)のような変数が宣言されている場合、StringまたはNumber Objectからプロパティを継承しますか?

+1

プロパティはプロパティです。変数の値と同様に、プロパティの値は、オブジェクトへの参照、数値、文字列、ヌル、または関数への参照(オブジェクトへの参照の特別な場合)、またはその他さまざまなものもの。 – Pointy

答えて

-2

Q1を。メソッドはプロパティのサブセットですか?

はい、javascriptのオブジェクト変数はすべてプロパティです。値が関数ならば、それはメソッドと呼ばれます。一般的に、オブジェクト変数はからなる仮想変数のよう性質行為がは、いくつかのプライベートフィールドにアクセスして変更するオブジェクトのメソッドを設定し得る一方で、属性フィールドと呼ばれています。 javascriptでは、この動作にオブジェクト変数を拡張できます。getterとsetterの定義hereを参照してください。

Q2。文字列や数値(NOT Object)などの変数が宣言されている場合、StringまたはNumber Objectからプロパティを継承しますか?変数の

号宣言のみ範囲を定義し、デフォルトでは、その型がundefinedあります。

function question() { 
    var answer; // answer is undefined type with question scope and undefined value 
    answer = 42; // now answer is number type 
} 

数と文字列リテラルがプリミティブ値ある、彼らは任意のメンバーが含まれていません。ただし、対応するオブジェクトタイプ(Number resp。String)のメンバーにアクセスすると、カーテンの背後に一時オブジェクトが作成され、そのメンバーにアクセスして一時オブジェクトが消滅します。

var b = "hello"; // b does not contain indexOf() method 
b.indexOf("lo"); // indexOf() is invoked on temporary created object 
"hello".indexOf("lo"); // same effect 
var c = new String("hello"); // c contains indexOf() method, greater footprint than b 
c.indexOf("lo"); // temporary object is not created, more effective 

console.log(b, typeof b); 
// "hello" 
// string 
console.log(c, typeof c); 
// String {0: "h", 1: "e", 2: "l", 3: "l", 4: "o", length: 5, [[PrimitiveValue]]: "hello"} 
// object 
// also contains __proto__ - prototype of the String object 
console.log(b==c); 
// true (comparison operator is overloaded) 
console.log(b===c); 
// false (the type does not match) 

ご覧のとおり、メンバーが必要ない場合は、プリミティブ値を作成する方が効果的です。しかし、メンバーを使用する場合は、オブジェクトを作成する方が効果的です。その場合、プロパティーは継承されます。

+0

「プロパティのメンバー」とは何ですか?聞いたことがない。 – Bergi

+0

@Bergiこれらはオブジェクトである[プロパティ記述子](https://developer.mozilla.org/cs/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty)のキーなので、キーはメンバです。少なくともそれは私の理解です。誤った用語がある場合は、この回答を改善するために私に教えてください。 –

+0

適切な用語は、プロパティの*属性*です。 *プロパティー記述子*のみがオブジェクトであり、プロパティー自体はオブジェクトではありません。しかし、私はこれらがプロパティ - vs-methodsの質問とは何をしているのかわかりません。 – Bergi

1

Q1。メソッドはプロパティのサブセットですか?

はい。プロパティの値が関数(厳密には関数への参照)である場合、それは通常オブジェクトのメソッドと呼ばれます。

var global = this; 
 
var obj = { 
 
    fn: function() { 
 
    console.log('this is ' + (this == obj ? 'obj' : 
 
     this == global? 'global' : this) 
 
    ); 
 
    } 
 
}; 
 

 
// Call as method of obj 
 
obj.fn(); 
 

 
// Call as plain function 
 
var f = obj.fn; 
 
f();

Q2:また、この方法は、オブジェクトにそのこのを設定するために呼び出されるべきであることを推測します。 stringやnumber(NOT Object)のように変数を宣言すると、String、Number Objectからプロパティを継承しますか?

変数には値がありません。変数を宣言すると、関連するコンテキスト内の参照として作成されます(varletconstとは異なる動作をします)。

変数の型を持っているように見えるかもしれないが、それは型を持つ値です。

var a; 
 
console.log('a is : ' + typeof a); // undefined 
 
a = "A"; 
 
console.log('a is : ' + typeof a); // string 
 
a = 5; 
 
console.log('a is : ' + typeof a); // number

関連する問題