javascript - 关于js的this指向。
本文介绍了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屋!
查看全文