2015-10-22 24 views
0

我有這樣的代碼,如何添加命名空間來揭示原型模式

var MyNamespace = MyNamespace || {}; 

MyNamespace.Calculator = function (eq) { 
     //state goes here 
     this.eqCtl = document.getElementById(eq); 
    }; 

MyNamespace.Calculator.prototype = function() { 
     //private members 
     var add = function (x, y) { 
      this.eqCtl.innerHTML = x + y; 
     }, 
     subtract = function (x, y) { 
      this.eqCtl.innerHTML = x - y; 
     }; 

     //public members 
     return { 
      add: add, 
      subtract: subtract 
     }; 
    }(); 

Var calc = new MyNamespace.Calculator('eqCtl'); 
calc.add(2,2); 

問題

爲什麼會出現異常增加「了myNameSpace」來了之後?它可以工作,如果我刪除它...

建議不要使用「新」關鍵字創建對象道格拉斯克羅克福德然後我該如何克服這種解決方案。

小提琴:https://jsfiddle.net/bpo50qjg/

+1

* 「雅虎duglas」 *正確叫做道格拉斯·克羅克福德。是的,克羅克福德有一個與'新'有關的問題。不,這並不意味着你不應該使用它。這意味着* Crockford認爲*你不應該使用它。重要的區別。閱讀他的反對意見,考慮爭論,並作出自己的決定。 –

+0

@ T.J.Crowder謝謝,你說得對,但我需要時間才能明白爲什麼道格拉斯會這麼說,我將在未來的某個時間做我的研究 – Mathematics

+1

爲什麼反對投票?是因爲模式還是我的錯誤? – Mathematics

回答

1

你有一個錯字:

Var calc = new MyNamespace.Calculator('eqCtl'); 

它應該是:

var calc = ... 
+0

我已經嘗試過,但它不工作:( – Mathematics

+0

@PleaseTeach它的工作原理,檢查我的小提琴:https://jsfiddle.net/bpo50qjg/2/ – hsz

+0

我想你忘了點擊更新@Fiddle: ),因爲你正在傳遞鏈接到我原來的小提琴 – Mathematics