2011-12-09 35 views
2

我正在使用Object Literal模式編寫大量JavaScript小部件和小應用程序。縮短JavaScript中成員方法內的對象名稱

我所做的一件事是在我將縮寫應用程序名稱縮寫爲「app」的方法之一中。

我這樣做主要是因爲它更容易編寫,而且我也明白它有一個小的性能增益。

var ApplicationName = { 
     property : "foo", 
     methodOne : function(){ 
      var app = ApplicationName; 
      return app.property; 
     }, 
     init: function(){ 
      var app = ApplicationName; 
      app.methodOne(); 
     } 
    } 
ApplicationName.init(); 

這種方法有什麼問題嗎?

回答

2

我不認爲你的方法有什麼問題,但它不是絕對必要的(你可以進一步縮短它)。調用init這樣的:

ApplicationName.init() 

...套thisinitApplicationName值。它允許你這樣做:

var ApplicationName = { 
    property : "foo", 
    methodOne : function(){ 
     return this.property; 
    }, 
    init: function(){ 
     return this.methodOne(); 
    } 
} 
+0

我掛斷了「this」關鍵字。 「這個」是指函數被應用到的對象,對嗎? –

+0

函數內'this'的值由函數的調用方式決定。每當你將一個函數作爲一個對象的方法調用時,函數內部this的值就是該方法被調用的對象。更多閱讀:https://developer.mozilla.org/en/JavaScript/Reference/Operators/this –

0

您的方法沒有問題。我不知道,如果下面的模式可能會幫助你太:

var ApplicationName = (function() { 
    var app; 
    return { 
     property: "foo", 
     methodOne: function() { 
      return app.property; 
     }, 
     init: function() { 
      app = ApplicationName; 
      app.methodOne(); 
     } 
    } 
})(); 

ApplicationName.init(); 

console.log(ApplicationName.property); // "foo" 

這種方式,你只需要別名ApplicationName一次。這意味着init()方法必須先被調用,但我想它是無論如何:-)

+0

這看起來像壞代碼給我。 – Raynos

+0

@Raynos - 這看起來像不好的代碼?這是JavaScript中非常常見的模式。 – Hacknightly

+0

獲取'app'和'ApplicationName'之間的性能差異是微不足道的。在'init'中設置'app = ApplicationName'也感覺相當難看。如果是'return(app = {...}),我會更好' – Raynos

0

這種方法沒有問題。事實上,推薦使用較小的JavaScript文件,因爲它們節省了服務器和客戶端的時間和帶寬。但是,如果您介意網站中的小文件,則最好使用網絡上提供的幾種工具之一壓縮您的javascript,而不是應用這些小的更改。如果您有一個帶有Ctrl + Space(即自動完成!)功能的良好IDE,那麼輸入全部內容並不困難。您可以將壓縮保留在壓縮機工具中。

你所說的表現增益可能會好幾毫秒,所以通常人們也不會介意。

總的來說,你寫的是安全的,但是在性能或文件大小方面沒有顯着的變化,所以人們希望喜歡與否。

相關問題