2013-07-18 137 views
8

我在javascript中使用模塊模式。 這是一種創建「類」實例的方法嗎? 我以正確的方式使用它?將參數傳遞給模塊javascript

var moduleClass = (function() { 
var a =5; 
return { 
getA: function() { 
    console.log(a); 
} 
}; 
})(); 
var instance = moduleClass; 
instance.getA(); 

http://jsfiddle.net/PzLKy/ 如何傳遞新的實例參數?

+0

如果您想在實例化時傳遞參數,請使用構造函數而不是文字。 – dandavis

+0

代碼中沒有涉及類的構造。你只需要用模塊模式生成一個單例。你想要什麼* - 只有這樣我們才能告訴你代碼是正確的? – Bergi

+0

我希望能夠聲明新的實例並傳遞不同的值。 我不想做特定的事情,我只是在學習。 – Petran

回答

-1

對於創建實例,您必須使用關鍵字new以及任何函數。 此功能也稱爲構造可以幫助您創建多個實例

var moduleClass = (function() { 
var a =5; 
return { 
getA: function() { 
    console.log(a); 
} 
}; 
})(); 
var instance = new moduleClass; 
instance.getA(); 

構造:構造函數使用new關鍵字,而且他們的你給一個對象原型的方法之一。

REFER - >

  1. Javascript Prototypes,objects,constructor??i am confused
  2. Constructors in JavaScript objects
+0

你說你自己''new'必須和**函數**一起使用... ... – Bergi

+0

你在發佈之前是否嘗試過你的代碼? – dandavis

+0

哦,我只是完全錯過了小提琴......現在通過它! –

7

你並不真正需要的是新來的,下面是一個代碼來實現你想實現什麼是正確的方式。 此外,be really careful while using new, if used unwisely it can start clobbering your Global variable,如果你想使用新的,約翰Resig的有如何做到這一點的正確方法,通過約翰Resig的 http://ejohn.org/blog/simple-class-instantiation/

http://jsfiddle.net/PzLKy/2/

var moduleClass = (function() { 
    var a =5; 

    return { 
     setA: function (inA) { 
     a=inA; 
    } , 
    getA: function() { 
     alert(a); 
    } 

    }; 

})(); 


var instance = moduleClass; 
instance.setA(8); 
instance.getA(); 

更多閱讀這篇文章一個非常好的交代編輯: contactmatt是正確的,絕對不要害怕使用構造函數,但這裏有一些你需要知道的東西

來自John Resig在第一段中提到的文章,

想這是你的代碼

function User(first, last){ 
    this.name = first + " " + last; 
} 

var user = new User("John", "Resig"); 
user.name // John Resig 
var user2 = User ("first","last"); 
user2.name //undefined, also this would pollute your current scope 

如果調用構造函數,你不會得到任何形式的指示,可以是一個噩夢般的調試。

的方式來解決,這是

function User(first, last){ 
    if (this instanceof User) { 
    this.name = first + " " + last; 
    } else 
    return new User(first, last); 
} 

得出結論,

所以,如果你覺得構造是你的問題的最好方法,使用它。但請注意,John的簡單類實例化也是一種非常有用的模式,試圖通過它,他還解釋了泛型構造函數。

0

使用構造函數。不要害怕「新」,只要明智地使用它。

注意:標準命名約定是命名將用作大寫字母的函數構造函數的函數。 (即而不是moduleClass ModuleClass)

function ModuleClass() { 
    var a =5; 
    return { 
    getA: function() { 
    console.log(a); 
    } 
    }; 
}; 

,或者如果你有足夠的勇氣來了解JavaScript中的「本」關鍵字。

function ModuleClass() { 
    var a =5; 
    this.getA = function() { 
    console.log(a); 
    }; 
}; 

var instance = new moduleClass(); 
instance.getA();