javascript - 关于js的this指向。

查看:118
本文介绍了javascript - 关于js的this指向。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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嘛?

解决方案

始终记住一句话: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();

这篇关于javascript - 关于js的this指向。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆