By Douglas Crockford
javascript是一种原型语言,但是他有new操作符使得它又像是传统的面向对象语言,这种情况经常使得程序员疑惑,导致一些错误
的编程模式
你从来不需要使用 new Object()
,直接用{}就好了,不要使用 new Array() ,用 []代替,javascript里的数组和java里的差不多
,用java模式的编程模式反而会使你疑惑的。
不要使用
new Number, new String, or new Boolean
,这会产生不必要的包装对象,用字面量即可。
不要使用new Function来创造函数
,直接使用函数表达式即可。
例如:
frames[0].onfocus = new Function(”document.bgColor=’antiquewhite’”)
最好写成:
frames[0].onfocus = function () {document.bgColor = ‘antiquewhite’;};
第二种形式允许编译器早一点看到函数体,所以会更早的探测出错误,有时候人们使用new Function是因为他们不懂的内部函数是怎么工作的。
selObj.onchange = new Function(”dynamicOptionListObjects["+
dol.index+"].change(this)”);
如果我们用字符串作为函数体,编译器看不到函数定义,如果我们用字符串变量表达式作为函数体,我们程序员也看不到它们了。
所以不要忽略这点,用函数来返回函数,我们可以显示绑定已知的值到一个的函数。
例如允许我们在循环中绑定事件:
selObj.onchange = function (i) {
return function () {
dynamicOptionListObjects[i].change(this);
};
}(dol.index);
把 new 放在 function 的做法前面不好,例如new 在构造新对象时并没有什么优势:
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的话,对象绑定在一个无用的原型对象上,浪费内存并且没有任何优势,如果我们不用new,
我们就不用在原型链上保存无用的原型对象。用工厂方法才是正确的做法:
var foo = function () {
function processMessages(message) {
alert(”Message: ” + message.content);
}
return {
init: function () {
subscribe(”/mytopic”, this, processMessages);
}
};
}();
所以规则很简单,唯一正确使用new的时机是调用用于模拟类的构造函数的时候,当函数作为构造函数调用时,
new是必须的。
总之:请在合适的时间,合适的地点使用 new 吧。
分享到:
相关推荐
JavaScript语言为了解决基本...但同时,我们也要注意不要滥用new运算符来创建基本包装类型的对象,避免在逻辑处理上产生混乱。正确的做法是使用基本类型的值,当需要使用到对象特有的方法时,再考虑创建相应的对象。
这有助于避免弹出窗口的滥用,或者在特定场景下保持用户的浏览体验一致。同时,也可以根据具体需求进行扩展,例如记录新窗口请求、在指定的子窗口中打开链接等。 请注意,由于这个方法依赖于IE的ActiveX控件,因此...
它通过分析聊天内容和用户行为模式来检测潜在的垃圾信息,并可以设置规则以自动或手动封锁发送垃圾信息的用户,从而保护服务器免受滥用。 Trojanscan是另一个重要的安全工具,其目的是检测并防止恶意软件(trojans...
【API滥用:移动应用中的新攻击与防御】 API(应用程序编程接口)滥用是当前信息安全领域的一个重大问题,尤其是在移动应用中。随着企业越来越多地依赖API来传输数据和提供服务,这些接口成为了攻击者的目标。根据...
这篇论文的主题"Security and privacy in 6G networks:New areas and new challenges"正是针对这些问题进行深入探讨。 6G网络安全性的新领域: 1. **量子通信技术**:6G可能会采用量子通信技术,如量子密钥分发...
### SCI写作中易混淆、滥用的单词和短语详解 #### About vs. approximately 在日常英语交流中,"about" 是一个非常常见的词汇,但在科技写作中,为了精确度和专业性,通常推荐使用 "approximately"。比如,在描述...
5. **安全性和合法性**:尽管程序注入有其合法用途,但滥用也可能导致安全风险,比如被恶意软件利用。因此,了解和遵循相关的法律和道德规范对于使用New-injector至关重要。 深入研究New-injector,开发者可以学习...
The emergence of new characteristics such as bilateral platforms, network externalities, and cross-price subsidies in the search engine service market makes it very different from traditional single-...
**3.1.3 SEG-Y滥用** 在实际应用中,有时会出现SEGY文件不符合标准的情况,这可能会影响到数据的正确读取。因此,在使用SEGY数据时需要注意数据格式的一致性和准确性。 **3.1.4 SEGYWRITE - 写入SEGY磁带或磁盘...
New Tab Extension-crx在设计时可能会考虑到这一点,确保用户的浏览习惯和个人信息不会被滥用。 8. **兼容性**:由于是crx格式的插件,New Tab Extension通常适用于基于Chromium内核的浏览器,如Google Chrome、...
这篇文档主要探讨了感冒和发烧的处理方法,强调了避免滥用抗生素的重要性,并提供了中医和西医的不同观点。 首先,文档中提到滥用抗生素是全球关注的问题,尤其在感冒治疗中。抗生素主要用于对付细菌感染,而大多数...
隐私保护则关注个人和企业数据的保护,以防止数据被滥用。这两方面是6G网络发展的关键挑战,因为6G技术预期将实现更高的数据传输速率、更低的延迟以及更广的覆盖范围,同时将集成更多智能化的功能。 当前对6G网络...
医院对抗生素的管理和使用是医疗工作中至关重要的一环,尤其在控制抗生素滥用、防止抗药性发展以及保障患者安全方面起着决定性作用。以下根据提供的报表内容,分析了几个关键知识点: 1. **抗菌药物分类**: 报表...
5. **权限滥用**:如果应用请求了不必要的权限,黑客可能会利用这些权限获取敏感信息。 6. **恶意代码插入**:在合法应用中插入恶意代码,如通过篡改APK或利用签名漏洞,可以实现远程控制或数据盗窃。 7. **代码混淆...
$reporter = Net::Abuse::Reporter->new()创建并准备报告引擎。 $reporter->add_incident($logs)吸收一个“事件”的日志,例如 垃圾邮件的完整标题和正文 来自 Apache、IPTables、Fail2ban 等的一个日志条目 一个...
5. 安全与隐私:按键扫描可能涉及用户隐私问题,因此程序设计时必须考虑数据保护措施,确保信息不被滥用。 6. 用户行为分析:这种扫描程序可以用于优化输入设备的性能,比如通过学习用户习惯来改进键盘布局或自动...
let program = ( new Props ) . let . x . $1 . plus . $2 . in . let . y . $2 . in . x . plus . y ; console . log ( program ( 6 , 3 ) ) // => 12常问问题这是合法的吗? 代理滥用目前在大多数州都是合法的,但...
这类软件可能用于技术支持、远程办公、教育等领域,但有时也可能被滥用进行非法活动。 **XTP-VC6.0**:XTP可能是一个专为C++开发的库,特别是为Visual C++ 6.0版本设计。VC6.0是微软的老版IDE,尽管已被更新版本...
这在处理敏感的区块链数据时尤为重要,因为错误的映射可能会导致数据泄露或资源滥用。 综上所述,"graph-cli-master-new_knowledgeisp_graph_wasm_TheMaster_"项目展示了WASM技术如何革新The Graph的数据处理方式,...