1.构造函数形参是函数,内部代码会调用该函数时,调用的时候this指向
根据promise的excutor得到的疑问,进行验证,初次手写promise的时候会出现,回调函数的this指向window的情况,要在promise内部把this用self暂存,所以出现下面的验证
let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('1')
}, 1000);
})
问题描述:
1.构造函数的形参是一个函数表达式
(如–>function GOUZAO(function(){**}){
xxxxx
};
2.构造函数内部代码,会对该形参的函数进行调用;
3.new这个构造函数的实例时,会跑一遍构造函数内部代码,此时会调用到形参的函数,问题是此时该函数的this是谁,换言之,谁调用的形参函数
例子如下:
function Funx (funx){
this.shuxing = '我是标志'
funx()
this.end = 'jiesu'
}
const f = new Funx(function(){
console.log('nihao');
})
调试如下,初次进入new Funx还未到funx()的时候,this指向的是Funx
运行funx()时,this指向了window
运行完后跑this.end时又回到Funx内部,this再次指向Funx
可见,这种情况下形参函数时由window调用的,是否可以理解为创建实例对象的操作是由外部的哪个对象执行,此时的函数调用就由谁执行?
this指向Funx的时候,Funx是构造函数对象,但是如果把函数写成性质,放进Funx中,再实例后由实例对象进行使用,按理说此时this应该是实例对象funx,下面进行验证,funx是Funx类型
- 所以顺序应该是,在new实例对象时,在没有跑完new里面的代码之前,此时的this是指向的实例对象;
- 如果里面的代码出现了运行形参函数的情况,该函数会被外部所包裹的对象调用,比如此时就是window;
- 函数运行完后,回到创建实例对象的代码中,this重新指向构造函数;
- 实例对象构造完成后,this重新指向实例对象,当调用实例对象下的某个属性时(该属性为函数),this指向这个实例对象,类型就是构造函数的类型
以下情况:
1.运行neibuf时this时包含neibuf的那个对象,即ff.limian,对应了上述总结的第二点—>该函数会被外部所包裹的对象调用
function F(){
this.limian = {
neibuf:function(){
console.log(this);
}
}
}
const ff = new