2015-02-06 29 views
0

我正在使用Javascript的「模塊模式」來創建一個新的類。下面是我有:如何在使用模塊模式時創建對象的新實例?

var Car = (function() { 
    var internal = {}; 

    internal.init = function(color, brand) { 
     internal.color = color; 
     internal.brand = brand; 

     return internal; 
    } 

    return internal; 
})(); 

然而,當我創建新實例似乎都返回相同的數據:

var ferrari = Car.init('red', 'ferrari'); 
var audi = Car.init('blue', 'audi'); 

console.log(ferrari.color + ' ' + ferrari.brand); // --> "blue audi" 
console.log(audi.color + ' ' + audi.brand);  // --> "blue audi" 

我怎麼去,以便它返回它的數據修復它初始化?

回答

1

您應該在您的init方法中實例化一個類。
您應該在您的模塊中創建一個類並在您的init中實例化它。

這應做到:

var Car = (function() { 
    var internal = {}; 

    var theClass = function(color, brand) { 

     this.color = color; 
     this.brand = brand; 

    } 

    internal.init = function(color, brand) { 
     return new theClass(color, brand); 
    } 

    return internal; 
})(); 

請參閱本:http://addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascript

+0

謝謝。你是英雄。 – 2015-02-06 01:56:32

+0

很高興有幫助。我也是模塊模式的粉絲。 – qtgye 2015-02-06 01:57:05

0

你是混合一些概念,來解決客觀問題的方法:

var Car = (function() { 
    var internal = {}; 

    internal.init = function(color, brand) { 
     var car = {} 
     car.color = color; 
     car.brand = brand; 

     return car; 
    } 

    return internal; 
})(); 

你做了這樣的事情:

  1. 創建一個匿名函數並執行它。執行的確如下:
  2. 創建一個對象並分配給一個名爲internal的變量。
  3. 創建一個功能單一實例改變本身,並再次返回本身
  4. 返回即單個實例

正如你所看到的,調用init兩次只會改變同一個對象,而不會創建一個新對象。

您必須每次創建一個新實例以實現您的期望。無論如何,請閱讀運營商和原型以更好地瞭解該主題。

相關問題