一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

修改構(gòu)造函數(shù)原型——JavaScript中的對(duì)象(二)

 集微筆記 2013-07-23
Email:longsu2010 at yeah dot net
今天先不寫原型繼承,先看一個(gè)誤區(qū):“改變構(gòu)造函數(shù)的原型(prototype)將魔法般的(magically)更新新對(duì)象和已經(jīng)存在的對(duì)象……”

這是完全錯(cuò)誤的,不要相信解釋JavaScript(包括任何事情)時(shí)使用了魔法(magic)這個(gè)單詞的作者。

function C() {} //constructor
var x = new C();
C.prototype.prop = 2;
var y = new C();
alert(x.prop);
alert(y.prop);

這段代碼將alert "2" 和 "2",這似乎證實(shí)了上面引號(hào)中的定義,因?yàn)閤對(duì)象在創(chuàng)建后增加了屬性prop。魔法般的?其實(shí)不是,看下面的例子。

function C() {} //constructor
var x = new C();
C.prototype = {prop: 2};
var y = new C();
alert(x.prop);
alert(y.prop);

這段代碼將alert "undefined" 和 "2"。
在第一個(gè)例子中對(duì)象x和y均有屬性prop。他們是隱藏在對(duì)象所引用的原型中(隱藏? 因?yàn)橹挥薪馕銎骺梢栽L問它)。當(dāng)訪問prop屬性的時(shí)候JavaScript無法在對(duì)象本身中找到,之后會(huì)搜索原型鏈,在原型鏈中找到并返回。這對(duì)于一個(gè)程序員來說是透明的。當(dāng)你向原型中增加一個(gè)新屬性的時(shí)候?qū)ο髕是不改變的。當(dāng)你訪問prop屬性的時(shí)候會(huì)在更新后的原型中找到它。
第二個(gè)例子中我們將原型改為一個(gè)新對(duì)象,而x依然使用舊的原型,但是y使用的是新原型,所以x和y不共享原型。很明顯舊原型不存在prop屬性。更糟糕的是,現(xiàn)在你丟失了唯一的訪問點(diǎn)(無法訪問舊原型了)。雖然創(chuàng)建對(duì)象的語法相同,但是他們是不同的。
另外,眾所周知,每一個(gè)對(duì)象有一個(gè)constructor屬性指向構(gòu)造函數(shù)。但是像prop那樣,constructor屬性存在于原型中而不是對(duì)象本身。
重寫原型的同時(shí)也重寫了constructor屬性,如下:
alert(x.constructor); // "function C() {}"
alert(y.constructor); // "function Object() { [native code] }"
因此當(dāng)你重寫原型后constructor屬性是不可信的,但是重寫原型又是JavaScript中的重要技術(shù)。

譯者:
本文講述了JavaScript中重寫原型后原型不一致的問題和constructor屬性指向問題。動(dòng)態(tài)修改原型對(duì)象不會(huì)在已有對(duì)象中生效。重寫原型對(duì)象后constructor的指向?qū)⑹遣豢尚诺?,可以在重寫原型后將constructor屬性重新賦值。如
function C();
C.prototype = {};

C.prototype.constructor = C;


相關(guān)文章:

你自認(rèn)為理解了JavaScript?

JavaScript交流貼

JavaScript中的對(duì)象(一)

消除JavaScript中的if


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产欧美日韩在线精品一二区| 欧美丝袜诱惑一区二区| 中文字幕熟女人妻视频| 日韩精品一区二区三区四区| 亚洲国产综合久久天堂| 久久国产精品熟女一区二区三区| 亚洲淫片一区二区三区| 黄片美女在线免费观看| 亚洲最新中文字幕一区| 在线视频免费看你懂的| 一区二区免费视频中文乱码国产| 欧美区一区二在线播放| 激情内射亚洲一区二区三区| 一区二区三区人妻在线| 国内欲色一区二区三区| 国产精品午夜福利免费阅读 | 亚洲精品中文字幕无限乱码| 日本在线不卡高清欧美| 熟女免费视频一区二区| 熟女免费视频一区二区| 中文字幕无线码一区欧美| 国产又粗又猛又大爽又黄| 国产精品白丝久久av| 亚洲第一香蕉视频在线| 99精品国产自在现线观看| 日本理论片午夜在线观看| 亚洲天堂久久精品成人| 综合久综合久综合久久| 福利新区一区二区人口| 尹人大香蕉中文在线播放| 在线懂色一区二区三区精品| 欧美一区日韩一区日韩一区| 99久久精品午夜一区二区| 一区二区日韩欧美精品| 黄色污污在线免费观看| 日本高清加勒比免费在线| 国产毛片av一区二区三区小说| 欧美午夜视频免费观看| 欧美国产日本免费不卡| 午夜久久精品福利视频| 午夜视频免费观看成人|