function Foo(){ this.y=2; } typeof Foo.prototype; Foo.prototype.x = 1; var obj3= new Foo(); obj3.x; obj3.y;
Foo构造器 this指向obj3对象。obj3的原型(__proto__)会指向Foo.prototype。
prototype的作用是Foo.prototype会用作new对象的原型。
即obj3.__proto__ == Foo.prototype //ture
Foo.prototype
结果:
constructor : ƒ Foo()
__proto__ : Object
constructor属性指向Foo对象本身
即Foo.prototype.constructor == Foo(true)
__proto__ 是非标准原型。此处是Foo.prototype的原型
一般的对象比如{}都有__proto__属性
注意:prototype是函数的一个内置对象。__proto__是对象的非标准原型
function Person(name,age){ this.name = name; this.age =age; }
一般调用this指向全局对象,浏览器中为window
new调用,this指向一个空对象,这个空对象的原型为Person.prototype。this作为return值。
Object.create(Person.prototype)创建一个空对象,并且这个对象的原型指向Person.prototype
var o = {f:function(){return this.a+ this.b}}; var p = Object.create(o) p.__proto__ == o //true
以上p的原型指向o
var a ={x:1} a.__proto__ == Object.getPrototypeOf(a) //true
Object.getPrototypeOf获取对象的原型