各大网站网络推广的收费,华为云云速建站,西安哪家网站建设公司好,软件开发平台都有哪些JavaScript本是一种基于原形的#xff08;prototypal#xff09;语言#xff0c;但它的“new”操作符看起来有点像经典语言。这迷惑了广大程序员们#xff0c;并导致了很多使用上的问题。 在JavaScript中#xff0c;不要用到new Object()这种操作#xff0c;该用{ }来代替… JavaScript本是一种基于原形的prototypal语言但它的“new”操作符看起来有点像经典语言。这迷惑了广大程序员们并导致了很多使用上的问题。 在JavaScript中不要用到new Object()这种操作该用{ }来代替。同理也不要用new Array()相应的用[]来代替。JavaScript的Array绝不同于Java的Array模仿Java的语法只会使人越来越糊涂。 也不要用new Numbernew String或是new Boolean。在JavaScript使用包装对象完全没有必要只需使用普通的声明就可以了。 不要用new Function来新建一个function而应当用最普通的function表达式。例如 frames[0].onfocus new Function(”document.bgColor’antiquewhite’”) 更好的写法是 frames[0].onfocus function () {document.bgColor ‘antiquewhite’;}; 同样定义一个事件第二句不会立即检测函数体哪怕是函数体有错也不会立即报错。只有不了解function内部机制的人才会用new Function这种声明方式。 selObj.onchange new Function(”dynamicOptionListObjects[ dol.index ].change(this)”); 如果我们直接写出函数体编译器是无法看到其内部的也就无法立即执行、无法立即引发错误。但如果我们用表达式方式声明函数如上看不到函数内部的则是我们。编程的话还是尽量对一且都尽量清晰可见吧。以声明函数的方式来返回一个函数我们可以更加明确地传值如下代码它还可以设定一个初始值。 selObj.onchange function (i) { return function () { dynamicOptionListObjects.change(this); }; }(dol.index); 还有一个不好的习惯是将new放到function的前面比如new function对于构造新的对象来说毫无意义。 myObj new function () { this.type ‘core’; }; 最好使用一个对象更轻盈更快捷如下 myObj { type: ‘core’ }; 如你希望新建一个既有私有变量也有私有方法的函数对象也不要使用new操作符。 var foo new function() { function processMessages(message) { alert(”Message: ” message.content); } this.init function() { subscribe(”/mytopic”, this, processMessages); } } 如果像上面一样使用new来执行此方法这个对象会挂在一个没有意义的prototype上它只会浪费内存。如果我们不用new就不会浪费prototype对象于prototype链所以更佳的方案是使用()。如下所示 var foo function () { function processMessages(message) { alert(”Message: ” message.content); } return { init: function () { subscribe(”/mytopic”, this, processMessages); } }; }(); 译后总结由于以前对yui并不了解直接就用了ext对js的不少地方也一知半解直到看了这篇frank所给的文章才对new操作符略知一二。 给我的感觉就是尽量不要显示地用new操作符因为new这个东西在编译期就已经对对象进行初始化了不用new的话运行期才进行初始化检查。实际上我的用词不准确在js中都是编译期或都是运行期。这样可以节省内存且有利于调试亦便于理解。 Ext的源码中用到了很多上面所提及的写法如果以前不很明白看完篇文章之后会有种豁然开朗的感觉。 对“prototype链”不太明白的可以参考这篇 http://www.javaeye.com/topic/53537 转载于:https://www.cnblogs.com/litao229/archive/2009/06/19/1506932.html