一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

JavaScript 原型與繼承說(shuō)明

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

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

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

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

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

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

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

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

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

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

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

先我們指定B的原型為A,因此,B函數(shù)繼承了A函數(shù)的特性,根據(jù)彈出的結(jié)果,我們可以看到,其constructor指向的是A函數(shù),那么我們的B函數(shù)的特性是不是丟失了呢?因此,我們需要在加上一句話(huà),最后給出繼續(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();

若有疑問(wèn)或不正之處,歡迎提出指正和討論。

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

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

主站蜘蛛池模板: jlzzjzz大全动漫 | 一区二区国产在线播放 | 日本激情网 | 精品国产国产综合精品 | 久久91这里精品国产2020 | 美女视频黄免费 | 可以直接看的av网址站 | 国产精品女同一区二区久久 | 国产精品美女在线 | 黄色网页在线免费观看 | 成人观看的视频三级 | 色吧久久 | 337p欧美 | 亚洲黄色在线播放 | 国产一区二区三区免费视频 | 激情六月丁香婷婷 | 成年人视频免费在线播放 | 亚洲综合色就色手机在线观看 | 亚洲综合色就色手机在线观看 | 色哟哟色院91精品网站 | 国产一区在线视频 | 欧美色黄 | 国产白白视频在线观看2 | www久久com| 午夜视频一区二区三区 | 亚洲一区二区三区在线免费观看 | 欧美一区二区三区在线视频 | 狠狠88综合久久久久综合网 | 欧美人善zozσ性伦交 | 欧美激情a∨在线视频播放 欧美激情不卡 | 午夜视频免费观看 | 91成人免费视频 | 2021精品国夜夜天天拍拍 | 综合久久影院 | 91黄色在线 | 国产91精品系列在线观看 | 国产手机在线精品 | 8090碰成年女人免费碰碰尤物 | 91视频免费观看网站 | 91麻豆精品国产自产在线观看一区 | 思99re久久这里只有精品首页 |