这些模式之间有什么区别?

时间:2018-01-05 18:42:09

标签: javascript oop closures

我一直使用以下模式:

;(function(ns){

   var _str = 'hello';

   ns.hello = function(){
      console.log(str)
   }

})(this.app = this.app || {});

app.hello(); // logs 'hello' to the console

我试图做更多OO类型的事情,并希望重用这种模式。我提出的以下内容与上述内容非常相似。

var App = (function(){

   var _str= 'hello';

   function App(){}

   App.prototype.hello = function(){
      console.log(_str);
   }

   return App;

})();

var instance = new App();
    instance.hello(); // logs 'hello' to the console

下一个变体使用"""想法,但我没有看到它在这个用例中的实用性:

var App = (function(){
   var that = this;
   this._str= 'hello';

   function App(){}

   App.prototype.hello = function(){
      console.log(that._str);
   }

   return App;

})();
var instance = new App();
    instance.hello(); // logs 'hello' to the console

在尝试以OO方式编写时,将事物包装在闭包中是否值得?上述构造函数的任何缺点?我应该专注于学习不同的模式吗?

0 个答案:

没有答案