すべての Javascript オブジェクトにはプロパティがあるとよく言われますが、関数の場合にのみ値があるprototypeことがわかりました。foo.prototypefoo
Chrome と Firefox ではobj.__proto__、値があります。これは前述のprototypeプロパティですか? prototypeしかし、IE 9では機能しません(できる方法はありますか?)、プロパティによって、それはobj.prototype機能するはずだと思いましたか?
Object.getPrototypeOf(obj)このプロパティを示しているように見えることは理解していprototypeますが、それを取得するために特別なメソッドが必要なのはなぜですか? オブジェクトのプロパティperson.nameを取得する のようにしないのはなぜですか?nameperson
更新:ちなみに、コンストラクターなしのプロトタイプ継承で行われた次のコードのように、プロトタイプのようにobj.constructor.prototype見えることもありますが、そうでないこともあります: . 46)
var Person = {
name: 'default value',
getName: function() {
return this.name;
}
}
var reader = clone(Person);
console.log(reader.getName());
reader.name = "Ang Lee";
console.log(reader.getName());
function clone(obj) {
function F() {};
F.prototype = obj;
return new F;
}
console.log("the prototype of reader is", Object.getPrototypeOf(reader));
console.log(Object.getPrototypeOf(reader) === reader.constructor.prototype);
console.log(Object.getPrototypeOf(reader) == reader.constructor.prototype);
console.log(Object.getPrototypeOf(reader) === reader.__proto__);
console.log(Object.getPrototypeOf(reader) == reader.__proto__);
結果は、最後の 4 行に対して false、false、true、true を示します。