为了账号安全,请及时绑定邮箱和手机立即绑定

关于js的this指向。

关于js的this指向。

宝慕林4294392 2018-12-12 14:14:55
var m = function() {    a = 3;    console.log(a, b ,this)};var init = function () {    var a = 1;    var b = 10;    m.call(this);}init();或var m = function() {    a = 3;    console.log(a, b ,this)}.bind(this);var init = function () {    var a = 1;    var b = 10;    m();}init();会报错,b is not defined, m里的this还是指向了windows如何通过不传参数的形式,可以访问到init中的变量b?换句话说,可以通过改变m函数调用时的this指向,访问到init中的b嘛?
查看完整描述

1 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

始终记住一句话:this永远指向最后调用他的对象。


当你执行init时,是window对象在执行,最后调用了上面m方法,因为在这个方法中,变量a是没有声明的,所以提升到全局层,因此你是可以在window对象下找到变量a的。如果要达到题主所说的效果,在题主的基础上可以这样修改:


var m = function(b) {

    a = 3;

    console.log(a, b ,this)

};


var init = function () {

    var a = 1;

    var b = 10;

    m.call(this , b);

}

init();

或者说将init提升到一个对象里面去吧:


var m = function() {

    a = 3;

    console.log(this.a, this.b ,this)

};

var aa = {

    a : 1,

    b : 10,

    init : function () {

        this.a = 2;

        this.b = 20;

        m.call(this);

    }

}

aa.init();


查看完整回答
反对 回复 2019-01-21
  • 1 回答
  • 0 关注
  • 452 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信