查看图片。怎么会这样?对象不应该继承其原型的方法吗?
King <-- FixedMovementPiece <-- 件
Piece 有 setXY 方法。
查看图片。怎么会这样?对象不应该继承其原型的方法吗?
King <-- 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]]