gpt4 book ai didi

javascript - 在 JavaScript 对象字面量中,我应该引用 'this' 还是变量名?

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

我在使用 this 的对象文字中遇到了问题,但是当更改为对象变量本身的名称时,我的问题就消失了。

使用此功能时,我收到'myFunction'不是函数错误。

我应该这样做吗:

var app = {

init: function() {

this.myFunction();

},

myFunction: function() {

return "Hello world!";

}

};

或者,这个?

var app = {

init: function() {

app.myFunction();

},

myFunction: function() {

return "Hello world!";

}

};

正确的做法是什么?

这个特定的示例是我的问题的一个非常简化的版本,可能不会重现相同的问题,但它与我遵循的一般模式相同,其中函数将使用 this 相互调用。

谢谢,迈克尔。

最佳答案

What is the correct way to do this?

两者都是正确的,具体取决于您想要实现的目标。

如果您只打算使用其中一种方法,并且不打算将这些方法复制到任何其他对象(您可以在 JavaScript 中执行此操作),那么使用 app 可能会导致更有道理。

我的猜测是,您在使用 this 时遇到的问题是您做了如下操作:

somethingThatAcceptsACallback(app.init);

someElement.onclick = app.init;

...当调用 init 时,它无法调用 myFunction。这是因为在 JavaScript 中(目前),this 的设置方式主要取决于如何调用函数,而不是定义函数的位置。在上述两种情况下,尽管对函数的引用被提供给其他代码,但当其他代码调用它时,它不会执行任何设置this应用程序

您可以使用 ES5 的 Function#bind (可以在 IE8 及更早版本上进行填充)来创建函数,在调用时,使用正确的 this 调用原始函数值:

somethingThatAcceptsACallback(app.init.bind(app));

someElement.onclick = app.init.bind(app);

但是,如果 app 是一次性的,那么只需在函数中使用 app 就可以了。

有关的更多信息(在我的博客上):

关于javascript - 在 JavaScript 对象字面量中,我应该引用 'this' 还是变量名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24264108/

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