画像をご覧ください。どうすればいいの?オブジェクトはそのプロトタイプのメソッドを継承することになっていませんか?
キング <-- FixedMovementPiece <-- ピース
Piece には setXY メソッドがあります。
画像をご覧ください。どうすればいいの?オブジェクトはそのプロトタイプのメソッドを継承することになっていませんか?
キング <-- FixedMovementPiece <-- ピース
Piece には setXY メソッドがあります。
__proto__
(現在のほとんどのブラウザーで定義されていますが、現在のECMAScript仕様では定義されていません)は、プロトタイプチェーンが検索されるときに使用されるものです。
prototype
関数がコンストラクターとして呼び出されるときに__proto__
、新しいオブジェクトのプロパティを割り当てるために使用されます。プロトタイプは通常コンストラクターではないため、prototype.prototype
有用であるか、定義されていることはめったにありません。
例:
Array.prototype === (new Array()).__proto__ //true
(new Array()).prototype === undefined //true
var a = {0:'a', 1:'b', 2:'c', length:3}
a.toString() // "[object Object]"
var a = {0:'a', 1:'b', 2:'c', length:3, __proto__:Array.prototype}
a.toString() // "a,b,c"
var obj = {__proto__:{}}
obj.name // undefined
obj.__proto__.name = "someString"
obj.name // "someString"
obj.name2 = "anotherString"
obj.__proto__.name2 // undefined
オブジェクトは、内部プロパティによって参照されるコンストラクターのプロトタイプ (つまり、インスタンスが作成されたときにコンストラクターが持っていたもの)から継承します。[[Prototype]]
関数のみがデフォルトでプロトタイプ プロパティを持ちます。例えば
// Declare function
function Foo(name) [
this.name = name;
}
// Add a showName method to its prototype
Foo.prototype.showName = function() {
return this.name;
}
// Create an instance
var foo = new Foo('foo');
// Call inherited method
foo.showName(); // foo
Mozilla ブラウザーには、オブジェクトの を参照する非標準 のプロパティもあります。これは ES6 にある可能性がありますが、一般的な Web には適していません。__proto__
[[Prototype]]