prototype、__proto__、[[prototype]]

prototype、proto、[[prototype]]

prototype

谁创建的

当你创建一个 Function object 的时候,一个名字为 prototype 的属性也会自动创建,并附着在 function object 上。

function Foo() {
	this.name = "Zhao Kun";
}

Foo.hasOwnProperty('prototype'); // true

[[prototype]]

谁创建的

使用 new 关键字创建一个新的对象,那么这个对象本身会有一个内部的/私有的或指针指向 Fooprototype

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

参考