JavaScript中使用new关键字和不使用的区别。

6
我有以下函数。
var myInstance =  (function() {
  var privateVar = 'Test';

  function privateMethod () {
    // ...
  }

  return { // public interface
    publicMethod1: function () {
      // all private members are accesible here
        alert(privateVar);
    },
    publicMethod2: function () {
    }
  };
})();

如果我向函数添加一个 new,会有什么不同?从Firebug中看,似乎两个对象是相同的。据我所知,两者都应该强制执行单例模式。

var myInstance =  new (function() {
  var privateVar = 'Test';

  function privateMethod () {
    // ...
  }

  return { // public interface
    publicMethod1: function () {
      // all private members are accesible here
        alert(privateVar);
    },
    publicMethod2: function () {
    }
  };
})();

2
JavaScript中的“new”关键字是什么? - mplungjan
1个回答

8
虽然最终结果看起来相同,但达成结果的方式和执行过程是不同的。 第一个版本使用thiswindow对象的上下文中执行匿名函数。第二个版本执行匿名函数,但this在一个新的空对象的上下文中。 最终,它们都返回另一个对象(您的Singleton)。这只是执行上下文中的轻微差异。 要测试这一点,请在声明privateVar变量之前放置alert(this);。 @Tom Squires: 这并不一定是正确的做法,不声明变量是很糟糕的习惯。有一个带有"use strict";指令的脚本会导致JS引擎抱怨(假设该引擎支持"use strict")。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接