Javascript 如何调用对象';s方法并使用变量
我这里有一小段代码,这是我遇到的一些情况的模型。作为一名PHP程序员,这在PHP中很容易做到,但我从来不知道如何在JS中做到这一点。也许有人能帮忙Javascript 如何调用对象';s方法并使用变量,javascript,Javascript,我这里有一小段代码,这是我遇到的一些情况的模型。作为一名PHP程序员,这在PHP中很容易做到,但我从来不知道如何在JS中做到这一点。也许有人能帮忙 var counterObj = { items: [1,4,7], total: 0, run: function() { $.each(this.items, function(i, item){ // Call my own method this.add(item); }) .p
var counterObj = {
items: [1,4,7],
total: 0,
run: function() {
$.each(this.items, function(i, item){
// Call my own method
this.add(item);
})
.promise()
.done(function(){
// doubt it will log 12
console.log(this.total);
});
},
add: function(item){
this.total = this.total + item;
}
};
counterObj.run();
这个在$中。每个都是指数组中的数字(这要怪jQuery)。相反,您应该这样做:
run: function() {
var _this = this;
$.each(this.items, function(){
_this.add(this); //so many "this"
});
console.log(this.total);
}
顺便说一下,.promise
和.done
只存在于jQuery对象中<代码>$。每个
返回原始数组
这是JavaScript中的
。还可以使用.apply
更改它,这是jQuery在其方法中所做的:
该值也可以通过this
关键字访问,但Javascript将始终将该值包装为对象,即使它是一个简单的字符串或数字值。
从
但是,即使jQuery没有修改这个
,它仍然会引用错误的对象(窗口
)
哦,是的,1+4+7
是12
,而不是13
:) 您声明的每个函数都会创建另一个作用域。您所要做的就是通过调用bind“method”将函数绑定到计数器对象。我不理解“promise”的用法,但我尝试在您的代码中做尽可能少的更改,以便我的更改变得清晰
var counterObj = {
items: [1,4,7],
total: 0,
run: function() {
$.each(this.items, function(i, item){
// Call my own method
this.add(item);
}.bind(this))
.promise()
.done(function(){
// doubt it will log 13
console.log(this.total);
}.bind(this));
},
add: function(item){
this.total = this.total + item;
}
};
counterObj.run();
您需要从您的作用域返回应该是公共的函数,否则它们将被视为私有的
例如:
var counterObject = {
...
return {
run: run
};
};
促销。。。。。。。。。我会再看一遍文档的。。promote()
这是一个新方法还是什么?我没有纠正,拼写错误。希望你只是想搞笑。@SaifBechan-你代码中的问题是这个指的是数组中的数字。我不建议使用变量“self”,因为它在浏览器中默认指向“window”对象。“that”或“\u this”会更具可读性。@UdiCohen-谢谢,已更改。
var counterObject = {
...
return {
run: run
};
};