原型链中的this是指谁,通过三步确认:
1, 看是谁调用(点之前是谁,就是谁调用)
2, 进行this替换
3, 基于原型链确认后果
举例如下:
function Pointer(x,y){ this.x = x this.y = y this.returnX = function(){ console.log(this.x) }}Pointer.prototype.returnX = function(){ console.log(this.y)}Pointer.prototype.sum = function(){ console.log(this.x + this.y)}Pointer.prototype.param = function(){ this.z = 4}let p1 = new Pointer(2, 3)console.log(p1.y) // 第一步:this:p1 ,第二步: p1.y ,第三步:p1.y =y =>3 p1.returnX() // 第一步:this:p1 ,第二步: p1.returnX ,第三步:p1.x =>2 p1.__proto__.returnX() // 1:第一步:this: p1.__proto__,第二步: Pointer.prototype.returnX ,第三步:Pointer.prototype.y =>undefinedPointer.prototype.returnX() // 1:第一步:this: Pointer.prototype,第二步: Pointer.prototype.returnX ,第三步:Pointer.prototype.y =>undefinedPointer.prototype.sum() // 1:第一步:this: Pointer.prototype,第二步: Pointer.prototype.sum ,第三步:Pointer.prototype.x + Pointer.prototype.y =>undefined +undefined = NaNp1.param() // 1:第一步:this: p1,第二步: this.z => p1.z ,第三步:p1.z = 4 =>给p1实例增加一个z属性Pointer.prototype.param() // 1:第一步:this: Pointer.prototype,第二步: this.z => Pointer.prototype.z ,第三步:Pointer.prototype.z = 4 =>给原型上设置一个z属性(实例的私有属性)