查看图片。怎么会这样?是不是应该继承其原型方法的对象?
King< - FixedMovementPiece< - Piece
Piece有setXY方法。
答案 0 :(得分: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
答案 1 :(得分:1)
对象继承自构造函数的原型(即构造函数在创建实例时具有的原型),由内部[[Prototype]]
属性引用。
默认情况下,只有函数具有prototype属性。 e.g。
// 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浏览器中还有一个引用对象[[Prototype]]
的非标准 __proto__
属性,它可能在ES6中,但它不适用于一般网络。