gpt4 book ai didi

javascript 对象变量作用域

转载 作者:行者123 更新时间:2023-11-28 19:57:15 24 4
gpt4 key购买 nike

我有一个 MessageHelper 对象,它有一个 idx 变量。现在我想通过索引方法访问和修改它。我以为“this”就可以了,但我得到了 NaN。有什么线索吗?

var MessageHelper = {
idx: 8,
formatDate: function(){
return function(text, render) {
// // parse date
var date = $.trim(render(text));
var mom = moment(date);
return mom.format("D/M/YY");
}
},
formatDateTime: function(){
[...]
},
getImportance: function(){
[...]
},
index: function(){
return function(text, render) {
this.idx++;
return this.idx;
}
}
}

最佳答案

函数内 this 的值取决于该函数的调用方式。如果您希望始终使用特定值(如 this)调用函数,最简单的方法是使用 Function.prototype.bind:

    index: function(){
return function(text, render) {
this.idx++;
return this.idx;
}.bind(this); // <--- HERE
}

在这个例子中,我依赖于这样一个事实:外部函数将像这样被调用:

MessageHelper.index()

所以在它里面,this实际上是MessageHelper。因此,MessageHelper 也将是索引返回的函数内的 this

如果您计划执行诸如将索引函数作为参数传递到某处之类的操作,则它将不会按预期调用,并且整个操作将会失败。在这种情况下,您应该绑定(bind)到 MessageHelper:

var MessageHelper = {
index : function(){}.bind(MessageHelper);
}

var myIndex = MessageHelper.index;
myIndex(); // this will return the correct function, bound to MessageHelper

关于javascript 对象变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22327480/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com