帮忙解释一下输出的结果为什么是333和aaa
function superClass () {
this.c =333;
this.d ='bbb';
}
function subClass () {
this.c =222;
superClass.call(this);
this.d ='aaa';
console.log(this.c);//333
console.log(this.d);//aaa
}
subClass();
帮忙解释一下输出的结果为什么是333和aaa
function superClass () {
this.c =333;
this.d ='bbb';
}
function subClass () {
this.c =222;
superClass.call(this);
this.d ='aaa';
console.log(this.c);//333
console.log(this.d);//aaa
}
subClass();
subClass();
在全局环境下执行,里面的this指向window;superClass.call(this)
这里将window传入函数,里面的this也是指向window;window.c =222;
window.c =333;
window.d ='bbb';
window.d ='aaa';
console.log(window.c);//333
console.log(window.d);//aaa
一。关于this简单说法:不考虑es6箭头函数和严格模式。this,谁调用就是指向谁。比如:
var a = 2;
var obj = {
a:1,
get:function(){
console.log(this.a);
}
};
obj.get();//1
var fun = obj.get;
fun();//2
//全局你可以直接理解this指向window。这里的fun挂在window上,即形式是x(),this指向windows
//如果形式是x.y(),this指向x。
//如果形式如x.y.z(),这时this指向y。
二。call/apply用法:call和apply类似,我用call举例
x.call(y,z);//你直接理解成y.x(z),按照上面的说法,this指向y
结论,如上面两条说法。浏览器全局下this,理解成window.superClass(),c和d都绑到window上面,结果就如题主结果。
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
3 回答1.7k 阅读✓ 已解决
5 回答808 阅读
4 回答2.2k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
3 回答843 阅读✓ 已解决
浏览器环境下this都是window,你这代码就相当于一直在按执行顺序修改全局变量,和call没什么关系。