国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

javascript 原型與原型鏈的理解及應用實例分析

2024-05-06 15:44:19
字體:
來源:轉載
供稿:網友

本文實例講述了javascript 原型與原型鏈的理解及應用。分享給大家供大家參考,具體如下:

javascript中一切皆對象,但是由于沒有Class類的概念,所以就無法很好的表達對象與對象之間的關系了。

比如對象A與對象B之間,它們兩個是相對獨立的個體,互不干擾,對象A修改自身的屬性不會影響到對象B。

雖然這很好,但是有一個問題,如果對象A與對象B都有一個方法 run() ,并且代碼也一樣,那對象A與對象B各自都獨立擁有一份 run() 方法的完整代碼,這是需要資源去保存的。

一旦我們程序中應用的對象過多,那這種資源消耗會是巨大的。那有沒有一種方法可以讓對象A與對象B擁有一些公共的屬性和方法,讓它們之前有某種聯系?

我們設想一下,會不會存在一個 common對象(公共對象),common對象上保存著公共的屬性和方法,而對象A與對象B里面有一個prototype屬性指向這個 common對象,

當然我們調用對象A或對象B的屬性和方法時,如果在自身對象中沒有找到,就去prototype這個屬性指向的對象上面去找。

而common對象本身也有一個prototype屬性指向更上一級的common對象,然后一直往上找啊找,直到為null,就停止。

這種不斷的從下往上找的這種路徑,就像鏈條一樣,我們稱它為 原型鏈,而那個common對象,我們稱它為 原型對象。

我們來看一個構造函數

function Base(name) {  this.name = name;}let A = new Base('A');let B = new Base('B');//每一個函數都有一個prototype屬性,指向該函數的原型對象console.log(Base.prototype);//當然原型對象也是一個對象,它也有一個constructor,指向構造函數console.log(Base.prototype.constructor === Base);//每一個實例對象的constructor都指向創建它們的構造函數console.log(A.constructor === Base);console.log(B.constructor === Base);//每一個實例對象都有一個__proto__屬性,該屬性指向構造函數的原型對象console.log(A.__proto__ === Base.prototype);console.log(B.__proto__ === Base.prototype);

1、每一個函數都有一個prototype屬性,它指向該函數的原型對象。

2、原型對象也是對象,它也有自已的constructor,它指向構造函數Base()。換句話說,其實原型對象也是構造函數Base()的一個實例。只不過比較特殊,用來存放公共屬性和方法的。

3、每一個通過構造函數Base()創建的實例對象,都有一個constructor,指向創建它們的構造函數。

4、每一個對象,都有一個 __proto__ 屬性,指向構造函數Base()的 原型對象。換句話說,__proto__ 是將 原型 串聯起來形成鏈條的關鍵。不然對象A與對象B都無法找到原型對象上的公共屬性和方法。

function Base(name) {  this.name = name;}//我們在原型對象上添加公共屬性Base.prototype.status = '開始';//我們在原型對象上添加公共方法Base.prototype.run = function() {  console.log(this.name + ' run ...');};let A = new Base('A');let B = new Base('B');A.run();B.run();console.log(A.status);console.log(B.status);//修改原型上的屬性,則實例對象也會跟著改變Base.prototype.status = '停止';console.log(A.status);console.log(B.status);            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 铜川市| 广汉市| 陈巴尔虎旗| 五台县| 白河县| 高阳县| 马关县| 宜兴市| 洛南县| 陇川县| 五家渠市| 如东县| 和龙市| 应城市| 富源县| 富川| 日喀则市| 巴南区| 萝北县| 灵武市| 玉山县| 新和县| 信丰县| 苍溪县| 奎屯市| 奉贤区| 茂名市| 丁青县| 宣威市| 垫江县| 萨迦县| 荆州市| 龙海市| 盖州市| 墨竹工卡县| 双牌县| 自贡市| 揭西县| 武穴市| 封开县| 六枝特区|