关于call()的一些疑问?

帮忙解释一下输出的结果为什么是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();

阅读 2k
3 个回答

浏览器环境下this都是window,你这代码就相当于一直在按执行顺序修改全局变量,和call没什么关系。

  1. subClass();在全局环境下执行,里面的this指向window;
  2. superClass.call(this)这里将window传入函数,里面的this也是指向window;
  3. 代码执行后相当于
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上面,结果就如题主结果。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题