3

画像をご覧ください。どうすればいいの?オブジェクトはそのプロトタイプのメソッドを継承することになっていませんか?

キング <-- FixedMovementPiece <-- ピース

Piece には setXY メソッドがあります。

奇妙な行動

4

2 に答える 2

2

__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
于 2012-11-27T03:46:16.837 に答える
1

オブジェクトは、内部プロパティによって参照されるコンストラクターのプロトタイプ (つまり、インスタンスが作成されたときにコンストラクターが持っていたもの)から継承します。[[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]]

于 2012-11-27T05:01:47.120 に答える