摘要:前言原型鏈,即原型鏈條。原型的作用在中,每個(gè)對(duì)象都有自己的原型。訪問(wèn)的屬性方法依舊不存在于該原型,則會(huì)繼續(xù)訪問(wèn)該原型的原型
前言:原型鏈,即原型鏈條。它是由原型、原型的原型、原型的原型的原型...這一規(guī)則組合成的,經(jīng)常被應(yīng)用于繼承。
原型的作用
在JS中,每個(gè)對(duì)象都有自己的原型。當(dāng)我們?cè)L問(wèn)對(duì)象的屬性和方法時(shí),JS會(huì)先訪問(wèn)對(duì)象本身的屬性和方法。如果對(duì)象本身不包含這些屬性和方法,則訪問(wèn)對(duì)象對(duì)應(yīng)的原型。
function Person(name,age){ // 對(duì)象自身的屬性 this.name = name; this.age = age; // 對(duì)象自身的方法 this.sayName = function(){ alert(this.name); }; } //原型上的方法 Person.prototype.sayAge = function(){ alert(this.age) } var xiaoming = new Person("XiaoMing",12); var xiaoHong = new Person("XiaoHong",11); // 調(diào)用自身不存在的方法 xiaoming.sayAge(); // 12 xiaoHong.sayAge(); // 11
上述例子中,方法“sayAge”是在原型上而非對(duì)象中。(關(guān)于對(duì)象與原型之間更為詳細(xì)的內(nèi)容,可閱讀文章:《淺談JS中的構(gòu)造函數(shù)、原型對(duì)象(prototype)、實(shí)例中的屬性/方法之間的關(guān)系》)
原型鏈的原理
原型自身也是一個(gè)對(duì)象(默認(rèn)情況下所有對(duì)象都是Object的實(shí)例)。
alert(xiaoming instanceof Object); // true alert(Person.prototype instanceof Object); // true
每個(gè)對(duì)象都有自己的原型,所以Person的原型也有它自己的原型,那就是:Object.prototype(部分瀏覽器允許通過(guò)實(shí)例的“__proto__”屬性訪問(wèn)其原型)
alert(Person.prototype.__proto__ == Object.prototype); // true
既然原型是一個(gè)對(duì)象,那么,當(dāng)我們?cè)L問(wèn)的屬性和方法在原型不存在,就會(huì)繼續(xù)訪問(wèn)原型的原型,直至Object.prototype。
function Person(name,age){ this.name = name; this.age = age; this.sayName = function(){ alert(this.name); }; } Person.prototype.sayAge = function(){ alert(this.age) } // 在Object.prototype增加一個(gè)“自我介紹”的方法 Object.prototype.introduce = function(){** alert("My name is " + this.name + ",I"m " + this.age + " years old!") } var xiaoming = new Person("XiaoMing",12); // 調(diào)用對(duì)象自身和原型上均不存在的方法 xiaoming.introduce(); // My name is XiaoMing,I"m 12 years old!
總結(jié)
原型鏈?zhǔn)荍S的一個(gè)特性,它實(shí)現(xiàn)的核心機(jī)制是:
1、訪問(wèn)對(duì)象的屬性(方法)時(shí),若對(duì)象本身不存在該屬性(方法),則會(huì)轉(zhuǎn)向訪問(wèn)該對(duì)象的原型;
2、對(duì)象的原型也是一個(gè)對(duì)象。訪問(wèn)的屬性(方法)依舊不存在于該原型,則會(huì)繼續(xù)訪問(wèn)該原型的原型...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/99711.html
摘要:兩日前,發(fā)了一篇吐槽,莫名的火了一把。關(guān)于的第一個(gè),其實(shí)就是聲明一個(gè)常量,不允許變更。另外對(duì)象迭代這里出自,阮一峰大神寫(xiě)的入門指南,對(duì)象篇。 兩日前,發(fā)了一篇吐槽,莫名的火了一把。經(jīng)過(guò)大家的建議與鼓勵(lì),于是修改了簡(jiǎn)歷,開(kāi)始了重新投遞,2天后接到第一份面試邀請(qǐng)。 此文為個(gè)人面試經(jīng)歷,QA問(wèn)答過(guò)程與總結(jié),不透露面試公司及面試人員,內(nèi)容真實(shí),如果有面試過(guò)我的大佬看到博客,歡迎指出問(wèn)題。 循序...
摘要:對(duì)于直接量和局部變量的訪問(wèn)性能差異微不足道,性能消耗代價(jià)高一些的是全局變量數(shù)組項(xiàng)對(duì)象成員。當(dāng)一個(gè)函數(shù)被創(chuàng)建后,作用域鏈中被放入可訪問(wèn)的對(duì)象。同樣會(huì)改變作用域鏈,帶來(lái)性能問(wèn)題。 早前閱讀高性能JavaScript一書(shū)所做筆記。 一、Loading and Execution 加載和運(yùn)行 從加載和運(yùn)行角度優(yōu)化,源于JavaScript運(yùn)行會(huì)阻塞UI更新,JavaScript腳本的下載、解析...
摘要:對(duì)于直接量和局部變量的訪問(wèn)性能差異微不足道,性能消耗代價(jià)高一些的是全局變量數(shù)組項(xiàng)對(duì)象成員。當(dāng)一個(gè)函數(shù)被創(chuàng)建后,作用域鏈中被放入可訪問(wèn)的對(duì)象。同樣會(huì)改變作用域鏈,帶來(lái)性能問(wèn)題。 早前閱讀高性能JavaScript一書(shū)所做筆記。 一、Loading and Execution 加載和運(yùn)行 從加載和運(yùn)行角度優(yōu)化,源于JavaScript運(yùn)行會(huì)阻塞UI更新,JavaScript腳本的下載、解析...
摘要:每一個(gè)執(zhí)行上下文可以訪問(wèn)的對(duì)象包括自身的作用域和父執(zhí)行上下文的作用域和父父執(zhí)行上下文作用域直到全局作用域,這就產(chǎn)生了作用域鏈。語(yǔ)句結(jié)束后,作用域鏈恢復(fù)正常。 0、自己理解 代碼執(zhí)行或函數(shù)調(diào)用生成執(zhí)行上下文(只有當(dāng)前執(zhí)行上下文有執(zhí)行權(quán)),該執(zhí)行上下文內(nèi)只能訪問(wèn)當(dāng)前執(zhí)行上下文的變量、函數(shù)和上一級(jí)執(zhí)行上下文中的變量、函數(shù),激活下一個(gè)執(zhí)行上下文的時(shí)候執(zhí)行權(quán)轉(zhuǎn)移到新的執(zhí)行上下文,形成執(zhí)行上下文棧...
閱讀 1827·2021-11-11 16:55
閱讀 1452·2019-08-30 15:54
閱讀 769·2019-08-29 15:34
閱讀 2253·2019-08-29 13:11
閱讀 2908·2019-08-26 13:28
閱讀 1878·2019-08-26 10:49
閱讀 992·2019-08-26 10:40
閱讀 2553·2019-08-23 18:21