3

查看图片。怎么会这样?对象不应该继承其原型的方法吗?

King <-- 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 回答