function Woman(name){
//继承了People
People.call(this); //People.call(this,'wangxiaoxia');
这里的this指向window,为什么能改变people中this的指向为Woman?
this.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