すべての Javascript オブジェクトにはプロパティがあるとよく言われますが、関数の場合にのみ値があるprototype
ことがわかりました。foo.prototype
foo
Chrome と Firefox ではobj.__proto__
、値があります。これは前述のprototype
プロパティですか? prototype
しかし、IE 9では機能しません(できる方法はありますか?)、プロパティによって、それはobj.prototype
機能するはずだと思いましたか?
Object.getPrototypeOf(obj)
このプロパティを示しているように見えることは理解していprototype
ますが、それを取得するために特別なメソッドが必要なのはなぜですか? オブジェクトのプロパティperson.name
を取得する のようにしないのはなぜですか?name
person
更新:ちなみに、コンストラクターなしのプロトタイプ継承で行われた次のコードのように、プロトタイプのように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 を示します。