簡體   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