日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

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

發布時間:2023/12/10 javascript 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

總結

以上是生活随笔為你收集整理的javascript操作符之new 也疯狂 (2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。