2014-06-21 20 views
0
var test = (function(){ 

    this.message = function(){ 
     alert('hi'); 
    }; 
})(); 

我有2個問題哪裏JavaScript函數和居住的價值是什麼

  1. 哪裏上面的函數去?它是否通過類名測試進入dom?
  2. 如何每次創建一個新對象並調用該函數。

我想要做的是創建一個類似數據結構的類,使用模塊化JavaScript創建對象。 我已經嘗試了上面的代碼,但是,我覺得我得到窗口對象中的消息函數而不是整個類。

+0

嗯「它是否與類名測試一起進入dom?」是什麼讓你這麼想的? :) –

+1

'message'會被添加到全局對象('window')中,因爲你在不使用'bind()'''call()'或'apply()的情況下在自調用匿名函數中引用'this' )'。這段代碼是一個相當複雜的設計,你能詳細說明你想用它達到什麼嗎? –

+1

你剛剛寫了純javascript ...你爲什麼提到DOM? –

回答

3

讓我們重寫代碼分爲以下大致相當於:

var test; 

function foobar() 
{ 
    this.message = function() { 
    alert('hi'); 
    } 
} 

foobar(); 

foobar功能表示被立即調用的匿名函數。

在函數內部,this將引用window(在瀏覽器中),因此有效地把它添加了message功能window,實現如下:

window.message = function() { 
    alert('hi'); 
}; 

但是,如果你想創建你需要的對象使用new,如:

function test() 
{ 
    this.message = function() { 
    alert('hi'); 
    }; 
} 

var x = new test(); 
x.message(); // alerts hi 

正如在評論中提到NULL,則建議在使用標題的套管功能與new一起使用,即function Test() { ... }

+0

這實際上是一個真正的很好的答案,但請始終使用大寫第一個字的類,例如< - – andlrc

+0

謝謝,實際上我是新來的JavaScript,我想知道這非常簡單的說明。感謝大家 – user799329