javascript操作符之new 也疯狂 (2)

JavaScript本是一种基于原形的(prototypal)语言,但它的“new”操作符看起来有点像经典语言。这迷惑了广大程序员们,并导致了很多使用上的问题。

在JavaScript中,不要用到new Object()这种操作,该用{ }来代替。同理,也不要用new Array(),相应的,用[]来代替。JavaScript的Array绝不同于Java的Array,模仿Java的语法只会使人越来越糊涂。

也不要用new Number,new 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276490.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中if语句缺省else_9_【Python学习分享文章】_if(条件语句)

【Python学习分享文章】_if(条件语句)_logicalJudgement介绍及基本操作综述计算机的“条件语句”和生活中的“条件成立”是不一样的。一个生活中的例子如果被计算机执行则是如下段子:老婆让程序员老公去买苹果,说:“去水果店买5个苹果&#x…

PHP生成各种验证码和Ajax验证

转载链接:http://www.helloweba.com/view-blog-191.html 验证码在WEB应用中非常重要,通常用来防止用户恶意提交表单,如恶意注册和登录、论坛恶意灌水等。本文将通过实例讲解使用PHP生成各种常见的验证码包括数字验证码、数字字母验证码、中文…

若川的2019年度总结,波澜不惊

从2014年开始写年度总结至今已经六个年头了。正如孔子所说:逝者如斯夫,不舍昼夜。2019年的年度总结写得比较晚,都快农历新年了,此刻在家里继续写完这篇文章。往年基本是元旦之后几天就写完了。我的年度总结尽量写得非技术人员也能…

如何正确选择仓储物流供应商?

如何正确选择仓储物流供应商? 以前有做电商的朋友向我咨询过怎么去选择优质的仓储物流供应商?有哪些能做作为关键问题进行参考。作为一个优秀的合作伙伴是可以为客户提供超乎预期的服务的,上海维佳供应链服务专业提供物流外包解决仓储物流供应…

在虚机上安装WIN2003

Moss2-turn on-WM;SJY;SJYM;666666备注:计算机名在网络上必须是唯一的。姓名:WP; 单位:SJY; 计算机名称:SJYP; 密码:666666server 2003 R2版 MDGJK-PF6YQ-PD8DJ-RFQVM-7WKWG在“网络设置”页面上,单击“典型…

python字典获取关联值_【Python实战12】使用字典关联数据

现在我的手里有了新的一组数据,数据内容如下:james.txt:James Lee,2002-3-14,2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22,2-01,2.01,2:16julie.txt:Julie Jones,2002-8-17,2.59,2.11,2:11,2:23,3-10,2-23,3:10,3.21,3-21,3.01…

Sending HTML content in an email using PHP

转载链接&#xff1a;http://code.web-max.ca/misc_htmlemail.php 发送一个HTML格式的电子邮件&#xff0c;主要在邮件的头信息中定义邮件正文的类型&#xff1a; Content-Type:text/html;charset"utf-8"。 示例&#xff1a; <?php// Example $HTML …

Realtime Ray Tracing RenderMan Point Cloud

这里演示的是演示的是光线与包围盒测试。在装备Winfast 8800GT 512M的台式机上可以进行每秒4.6亿次点到射线的距离计算计算&#xff0c;用于判断点是否真正的与射线相交。外部数据的填充与准备延迟依旧是GPGPU应用的一个巨大门槛。白色是命中的包围盒&#xff0c;绿色的就是射线…

SharePoint文档上传管理

前台代码: <% Control Language"C#" AutoEventWireup"true" CodeBehind"FileUpload.ascx.cs" Inherits"UploadFile.FileUpload" %><table><tr><td style"width:138px; height: 24px;">请选择列表:…

如何制定有价值的目标

写于2017年07月09日23:29现在修改发布到公众号声明原创公司会制定一系列目标&#xff0c;个人也可以制定一些目标&#xff0c;有利于自我学习成长。那么看我这篇文章可以告诉你如何制定有价值的目标。会制定有价值的目标&#xff0c;绝对超越很多人。SMART原则王健林之前说定个…

清除dns缓存命令行_怎么防止移动dns劫持,防止移动dns劫持要先了解什么是dns劫持...

本人以网络技术出身&#xff0c;近两年接触CDN网络&#xff0c;处理了一些CDN方面的网络问题&#xff0c;大多数以运营商丢包&#xff0c;延迟抖动为主&#xff0c;也处理一些硬件故障&#xff0c;比如机械硬盘的读写io测试&#xff0c;内存条兼容性测试&#xff0c;服务器IPMI…

php 修改上传文件大小 (max_execution_time post_max_size)

转载链接&#xff1a;http://hi.baidu.com/ttl289/item/683c8223a54c6d0f76272cd7 有些朋友要通过自己的网站后台&#xff0c;包括论坛&#xff0c;来上传一些文件&#xff0c;php一般为2m&#xff0c;或8m&#xff08;以下我们按默认为2m&#xff09;&#xff0c;接下来就是来…

移动硬盘格式化(pc和mac共用)-菜鸟级解决方案[转]

用pc的时候买了一个320G的移动硬盘&#xff0c;从来没考虑过什么格式化的问题&#xff0c;插上就用了。 后来接触mac才发现pc和mac在移动存储设备的格式化上还是有不少冲突的。如果你的移动硬盘mac上不能修改&#xff0c;或者pc上找不到&#xff0c;那就尽情得批判万恶的资本主…

【php】php的ssh2扩展的安装

ssh2(secure shell2)&#xff0c;对于远端主机提供高安全性的资料传输工作。安装&#xff1a;1、首先要装OpenSSL。 2、要安装 libssh2../configure && make all install3、再然后&#xff0c;安装PECL/ssh2可以使用 pear install ssh2安装&#xff08;有的说是 pear i…

回答知乎问题:你写过什么自认为惊艳的诗?

首次整理于 2019-07-27 22:04:00&#xff0c;现在整理发布在公众号申明原创。整理了一下大学期间2012年&#xff5e;2016年发布在QQ空间&#xff0c;自己感觉写得还行的七首“诗词”。回答知乎问题&#xff1a;你写过什么自认为惊艳的诗&#xff1f;中国古诗词博大精深。小时候…

lighttpd安装配置支持php

转载链接&#xff1a;https://wiki.freebsdchina.org/howto/n/php_fastcgi_lighttpd 安装lighttpd 记得在SPAWNFCGI前打勾 [X] SPAWNFCGI Depend on spawn-fcgi utility #cd /usr/ports/www/lighttpd #make config #make install clean 安装php 模块自己看自己需要 #cd /usr/p…

密码可逆不可逆选择_膝关节损伤不可逆!跑步要注意!

膝盖同时也是运动者最常受伤的关节。根据美国运动医学整型外科协会的报告&#xff0c;美国每年约有三百万人拉伤、挫伤、或扭伤他们的膝部&#xff0c;其中约有一半是因为运动引起的。而对于跑者而言&#xff0c;影响最大的就是我们的膝关节。换言之&#xff0c;长跑的潜在危害…

MS CRM 2011 C#中获取Web Resource

原创地址&#xff1a;http://www.cnblogs.com/jfzhu/archive/2013/02/15/2913077.html 转载请注明出处 我在以前的文章中讲过如何用JScript读取web resource资源&#xff0c;我在本文中将要讲解如何在C#中获取web resource资源。 有时候可能有这样的需求&#xff0c;你需要在一…

测试驱动开发

测试驱动开发: 测试驱动开发&#xff08;Test Driven Development,英文缩写TDD&#xff09;是极限编程的一个重要组成部分&#xff0c;它的基本思想就是在开发功能代码之前&#xff0c;先编写测试代码。也就是说在明确要开发某个功能后&#xff0c;首先思考如何对这个功能进行测…

面试官问:能否模拟实现JS的call和apply方法

写于2018年11月30日&#xff0c;发布在掘金上阅读量近一万&#xff0c;现在发布到微信公众号申明原创。相对比较基础的知识&#xff0c;虽然日常开发可能用得比较少&#xff0c;各种源码中有很多call和apply&#xff0c;需要掌握。前言这是面试官问系列的第三篇&#xff0c;旨在…