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.pswp.cn/news/276490.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276490.shtml
英文地址,請注明出處:http://en.pswp.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;旨在…