我的同事一直在使用带有小写字母“f”的“new function()”来定义 JavaScript 中的新对象。它似乎在所有主要浏览器中都运行良好,而且在隐藏私有变量方面似乎也相当有效。下面是一个例子:
var someObj = new function () {
var inner = 'some value';
this.foo = 'blah';
this.get_inner = function () {
return inner;
};
this.set_inner = function (s) {
inner = s;
};
};
一旦使用“this”,它就成为 someObj 的公共属性。所以 someObj.foo, someObj.get_inner() 和 someObj.set_inner() 都是公开的。此外,set_inner() 和 get_inner() 是特权方法,因此它们可以通过闭包访问“内部”。
但是,我在任何地方都没有看到对这种技术的任何引用。甚至 Douglas Crockford 的 JSLint 也抱怨它:
- 奇怪的建筑。删除“新”
我们正在生产中使用这种技术,它似乎运行良好,但我对此有点担心,因为它没有在任何地方记录。有谁知道这是否是一种有效的技术?