我的同事一直在使用带有小写"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;
};
};
Run Code Online (Sandbox Code Playgroud)
一旦使用"this",它就成为someObj的公共财产.所以someObj.foo,someObj.get_inner()和someObj.set_inner()都是公开的.另外,set_inner()和get_inner()是特权方法,因此它们可以通过闭包访问"内部".
但是,我在任何地方都没有看到任何对此技术的引用.甚至Douglas Crockford的JSLint抱怨它:
- 怪异的建筑.删除'新'
我们在生产中使用这种技术,它似乎运作良好,但我有点担心它,因为它没有在任何地方记录.有谁知道这是否是一种有效的技术?
我刚刚在javascript中讨论了单例设计的几个主题.我是100%新设计模式的东西,但正如我所看到的,因为根据定义,Singleton不需要实例化,概念上如果它不被实例化,在我看来它不必被视为从蓝图(类)创建的常规对象.所以我的奇怪是为什么不仅仅考虑一个单独的东西,就像静态可用的东西,包含在某种范围内,应该是全部.
从我看到的主题,他们中的大多数通过传统的javascript制作单身
new function(){}
Run Code Online (Sandbox Code Playgroud)
然后创建一个伪构造函数.
我只是觉得一个对象字面就足够了:
var singleton = {
dothis: function(){},
dothat: function(){}
}
Run Code Online (Sandbox Code Playgroud)
对?或者任何人都有更好的见解?
[更新]:我的观点再次表明,为什么人们只是使用更简单的方法在javascript中制作单身,就像我在第二个片段中所示,如果有绝对的原因请告诉我.我经常害怕这种情况,我简化了很多事情:D