借用构造函数中call(this)的指向是window吗?


function Woman(name){
 //继承了People
  People.call(this); //People.call(this,'wangxiaoxia'); 
这里的this指向window,为什么能改变people中this的指向为Womanthis.name = name || 'renbo'
}
let womanObj = new Woman();

求解谢谢

哈哈哈,还是让我来回答一下吧家人们
首先,如果是这样子的话,如下面代码

function Woman(name){
  Person.call(this)
  console.log(this)
}
//如果直接使用Woman方法,即Woman(),那么this确实会指向windows
//--------------------------
//但是家人们,我们一般不会直接这么用Woman方法的,既然我们一开始的目的是,借用构造方法完成js的继承,借用完构造方法接下来干嘛?
//哎对啦,生成子类实例,如下
let womanObj = new Woman()
//这个步骤有什么问题??大问题!!
//new关键字会改变this指向,指哪,Woman好吧,因为new它,this就会指向他,所以在内部写call(this)指向woman本身,而不指向window

实在太有帮助了,感谢文章主分享

参考GPT和自己的思路:

当借用构造函数时,使用 call 或 apply 方法可以将 this 绑定到指定的对象上,从而使得在借用函数中使用的 this 关键字指向该对象。在上面的代码中,语句 People.call(this) 把 this 绑定到 Woman 对象上,从而使得在 People 函数中使用的 this 关键字指向了 Woman 对象。

因此,正确的说法应该是这里的 this 指向 Woman 对象,而不是 window。在借用构造函数中使用 call 方法时, this 的指向由 call 的第一个参数决定,即将第一个参数作为 this 指向。如果不传入参数,默认指向全局对象 window。

this是当前的对象,如果是全局函数,指当前页。

参考GPT和自己的思路:

在借用构造函数的模式中,通过调用call或apply方法将一个对象作为函数执行的上下文来使用,从而达到继承的目的。在上面的代码中,通过People.call(this)来调用父类构造函数并将当前对象作为上下文,使得在父类构造函数中的this指向当前对象。

但是,如果在使用借用构造函数模式时,没有指定this的值,那么this将会指向全局对象window。在上面的代码中,如果父类构造函数People中没有使用this关键字,那么调用People.call(this)时会将this指向全局对象window。但是,在People中使用了this关键字,所以在调用People.call(this)时,this指向的是当前的womanObj对象。

因此,People.call(this)并不会将this指向window,而是将this指向了womanObj对象,并且由于调用了父类构造函数,使得womanObj对象获得了父类构造函数中定义的属性和方法,实现了继承的功能。

请看这篇文章http://t.csdn.cn/zPTR8