繁体   English   中英

在JavaScript对象文字中,我应该指代“ this”还是变量名?

[英]In a JavaScript object literal, should i refer to 'this' or the variable name?

我在使用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相互调用。

谢谢,迈克尔。

正确的方法是什么?

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

如果您只打算使用这些方法之一,而又不想将这些方法复制到任何其他对象(可以在JavaScript中完成),那么使用app可能更有意义。

我的猜测是,使用this时遇到的问题是您做了这样的事情:

somethingThatAcceptsACallback(app.init);

要么

someElement.onclick = app.init;

...并且在调用init时,无法调用myFunction 这是因为在JavaScript(现在),一路this设置主要取决于函数是如何调用 ,而不是其中定义的功能。 在以上两种情况下,尽管对该函数的引用都被另一个代码引用,但是当另一个代码调用它时,它并没有做任何事情this设置为app

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

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

要么

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

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

关于this更多信息(在我的博客上)

在您的第一个代码中, 引用与应用程序引用相同。 我认为我可以建议

var app = {    
    init: function() {    
        app.myFunction();   
    },   
    myFunction: function() {    
        return "Hello world!";    
    }   
}; 

这段代码可以更好地理解。

在javascript中, this变化取决于函数的调用方式。 这个问题通常是通过创建一个命名的变量得到解决, self其被指派值this的阶段,当你知道的肯定值this

var app = {
    self: this,
    init: function() {

        self.myFunction();

    },
    myFunction: function() {
        return "Hello world!";
    }
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM