天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

JavaScript 原型與繼承說明

function A(x)
{
this.x = x;
}
alert(A.prototype);
alert(A.prototype.constructor);
根據(jù)彈出的結(jié)果,我們可以得到:原型對象是由函數(shù)的構(gòu)造函數(shù)創(chuàng)建,它所擁有的屬性能被所有對象共享,初始時原型對象指向一個Object對象,并且定義了一個constructor屬性,該屬性指向定義該原型對象的構(gòu)造函數(shù)本身,再看如下代碼。

Code
function A(x)
{
A.prototype.x = x;
}
var obj = new A(10);
alert(obj.x);
alert(obj.constructor);
因為原型對象的所有屬性能被構(gòu)造函數(shù)創(chuàng)建對象共享,所以創(chuàng)建的對象可以訪問這里的constructor屬性,同時obj對應(yīng)的就是原型對象(prototype)所創(chuàng)建出來的一個實例,那么重寫constructor屬性會出現(xiàn)什么樣的結(jié)果呢?

Code
function A(x)
{
A.prototype.x = x;
}

var objA = new A(10);
objA.constructor = function(x){ alert("重寫obj的constructor屬性");this.x = 20 };
objA.constructor();
alert(objA.x);

var objB = new A(10);
alert(objB.x);
根據(jù)結(jié)果我們可以看到,首先彈出的是“重寫obj的constructor屬性”,然后彈出20,在彈出10,可見,我們在書寫重寫objA這個對象的constructor之后,objB并沒有被改變,因此無論在一個對象加入或修改多少屬性這都不影響其原型對象中屬性的本來面目,其實很容易理解js為什么這樣做,因為一個對象的行為不能影響到其他對象,否則將會造成混亂。

在這里,我們可以總結(jié)一下,上面代碼的規(guī)則:

1.當(dāng)我們調(diào)用某個對象的時候,首先檢查該對象本身的自己定義的屬性,如果存在則調(diào)用。

2.當(dāng)自己本身的屬性不存在的時候,則調(diào)用其構(gòu)造函數(shù)所定義的原型對象的引用。

那么根據(jù)這個規(guī)則,就形成了JavaScript中的一個原型鏈,我們就可以根據(jù)這個規(guī)則來定義繼承關(guān)系。
復(fù)制代碼 代碼如下:
function A(x)
{
A.prototype.x = x;
}

function B(x,y)
{
B.prototype.y = y;
A.call(this,x);
}

這段代碼顯示了兩個函數(shù),B函數(shù)繼承與A函數(shù),A.call(this.x)表示,將B的對象this傳遞到A函數(shù)中進(jìn)行執(zhí)行。然后,我們同樣需要由B函數(shù)構(gòu)造出來的對象需要包含A函數(shù)的所有特性,因此需要加上這么一句話。
復(fù)制代碼 代碼如下:
B.prototype = new A();
alert(B.prototype.constructor);

先我們指定B的原型為A,因此,B函數(shù)繼承了A函數(shù)的特性,根據(jù)彈出的結(jié)果,我們可以看到,其constructor指向的是A函數(shù),那么我們的B函數(shù)的特性是不是丟失了呢?因此,我們需要在加上一句話,最后給出繼續(xù)的整合代碼。
復(fù)制代碼 代碼如下:
function A(x)
{
A.prototype.x = x;
A.prototype.ShowA = function(){ alert("A的Show方法!"); };
}

function B(x,y)
{
B.prototype.y = y;
A.call(this,x);
B.prototype.ShowB = function(){ alert("B的Show方法!"); };
}

B.prototype = new A();
B.prototype.constructor = B;

var obj = new B(10,5);
alert(obj.x);
alert(obj.y);
obj.ShowA();
obj.ShowB();

若有疑問或不正之處,歡迎提出指正和討論。

JavaScript技術(shù)JavaScript 原型與繼承說明,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 最新黄yyid | 国产精品女主播主要上线 | 一手揉着乳头一手模仿抽插视频 | 成人在线观看国产 | 野花日本韩国视频免费高清观看 | 秋霞午夜鲁丝片午夜精品久 | 午夜阳光影院在线观看视频 | AV国产乱码一区二区三视频 | 国产一区内射最近更新 | 在线观看免费精品国产 | 在线免费公开视频 | xx在线观看 | 亚洲精品一卡二卡三卡四卡2021 | 日日摸夜添夜夜夜添高潮 | 91情国产l精品国产亚洲区 | 久久久久久极精品久久久 | 东北成人社区 | 年轻夫妇韩剧中文版免费观看 | 免费看片A级毛片免费看 | 午夜天堂AV久久久噜噜噜 | 久久亚洲人成网站 | 天上人间影院久久国产 | 人妻满熟妇AV无码区国产 | 欧美成人亚洲高清在线观看 | qvod在线电影 | 日本精品卡一卡2卡3卡四卡三卡 | 欧美18精品久久久无码午夜福利 | 亚洲欧洲精品成人久久曰影片 | caoporon超碰在线视频 | 9477小游戏 | 一级做a爰片久久毛片苍井优 | 亚洲 日韩 色 图网站 | 一抽一出BGM免费3分钟 | 少妇人妻偷人精品视蜜桃 | 超碰公开在线caopon | 囯产精品一区二区三区线 | 被老师按在办公桌吸奶头 | 色噜噜噜噜亚洲第一 | 俄罗斯女人Z0Z0极品 | 91系列在线观看免费 | 韩国伦理片2018在线播放免费观看 |