假设我有一个namespace
和几个function
,例如这样:
HTML
<input type="button" class="btn" value="click">
JAVASCRIPT
var nms = {
doAlert: function(){
alert('doing alert');
console.log(this);
},
bindBtn: function(){
var that = this;
$('.btn').on('click', that.doAlert);
}
}
nms.bindBtn();
log
打印<input type="button" class="btn" value="click">
,换句话说,this
指的是我正在执行function
的元素。
这可能是我的缺点,但我想了解如何引用nms
而不是input
。如果可能,请使用this
答案 0 :(得分:2)
答案 1 :(得分:1)
有很多方法可以做到这一点。我更喜欢在IIFE(立即调用的函数表达式)中定义对象,以便它可以使用私有变量来跟踪自身:
var nms = (function () {
var myownself = {
doAlert: function () {
alert('doing alert');
console.log(myownself);
},
bindBtn: function () {
$('.btn').on('click', myownself.doAlert);
}
};
return myownself;
})();
nms.bindBtn();
这样,该对象的所有方法都可以引用myownself
变量,但是他们不需要知道nms
变量,通过该变量可以知道对象的其余部分。你的代码。如果你做了类似的事情:
var temp = nms.bindBtn;
temp();
...在this
中“混淆”bindBtn()
的值然后无关紧要,因为bindBtn()
仍会使用myownself
。
请注意,此模式假定nms
将是单个对象。如果您希望能够实例化多个副本,您仍然可以使用相同的一般想法,但使用工厂函数或常规构造函数与new
(而不是IIFE)。
答案 2 :(得分:0)
var nms = {
doAlert: function(){
alert('doing alert');
console.log(this);
},
bindBtn: function(){
$('.btn').on('click', nms.doAlert.bind(nms));
}
}
要支持IE的绑定,您可以use this
答案 3 :(得分:0)
试试这个
var nms = {
doAlert: function(){
alert('doing alert');
console.log(this);
},
bindBtn: function(){
var that = this;
$('.btn').on('click', function(){
nms.doAlert.apply(that);
});
}
}
nms.bindBtn();
这会将that
传递给函数this
您也可以使用call()
一些链接
或不使用电话或申请
var nms = {
doAlert: function(){
var _this = nms;
alert('doing alert');
console.log(_this);
},
bindBtn: function(){
var that = this;
$('.btn').on('click', nms.doAlert);
}
}
nms.bindBtn();