prototype、proto、[[prototype]]
prototype
谁创建的
当你创建一个 Function object
的时候,一个名字为 prototype
的属性也会自动创建,并附着在 function object
上。
function Foo() {
this.name = "Zhao Kun";
}
Foo.hasOwnProperty('prototype'); // true
[[prototype]]
谁创建的
使用 new
关键字创建一个新的对象,那么这个对象本身会有一个内部的/私有的或指针指向 Foo
的 prototype
:
function Foo() {
this.name = "Zhao Kun";
}
let b = new Foo();
b.[[Prototype]] === Foo.prototype // true
proto
谁创建的
__proto__
是 [[prototype]]
的 public
形式的指针:
let b = new Foo();
b.__proto___ === Foo.prototype // true
自 ECMAScript5
起,你有另外一种选择,可以拿到这个对象内部的私有的 [[prototype]]
的这个指针:
Object.getPrototypeOf(b) === b.__proto__ // true