亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
原型(prototype)到底是什么?
原型鏈?zhǔn)窃趺葱纬傻模?/a>
如何正確設(shè)置原型鏈?
原型鏈中的常見(jiàn)問(wèn)題
首頁(yè) web前端 前端問(wèn)答 了解JavaScript原型鏈

了解JavaScript原型鏈

Sep 20, 2025 am 04:58 AM
原型鏈

原型鏈?zhǔn)荍avaScript實(shí)現(xiàn)繼承的核心機(jī)制。每個(gè)對(duì)象都有__proto__屬性指向其構(gòu)造函數(shù)的prototype,訪問(wèn)屬性時(shí)會(huì)沿此鏈向上查找。例如,用Object.create()設(shè)置Dog.prototype繼承Animal.prototype后,實(shí)例myDog可調(diào)用eat方法。正確設(shè)置原型鏈需:1. 用Object.create(SuperClass.prototype)創(chuàng)建子類(lèi)原型;2. 添加子類(lèi)方法;3. 手動(dòng)重置constructor。常見(jiàn)問(wèn)題包括:錯(cuò)誤賦值原型、未用new調(diào)用構(gòu)造函數(shù)、原型修改順序不當(dāng)。原型鏈最終指向Object.prototype,再往上為null。掌握這些核心概念和步驟,即可理清原型鏈邏輯。

Understanding the JavaScript Prototype Chain

JavaScript 的原型鏈?zhǔn)抢斫鈱?duì)象繼承機(jī)制的關(guān)鍵。很多人在剛接觸時(shí)會(huì)覺(jué)得復(fù)雜,其實(shí)只要抓住幾個(gè)核心概念,就能理清邏輯。

Understanding the JavaScript Prototype Chain

原型(prototype)到底是什么?

每個(gè)函數(shù)都有一個(gè) prototype 屬性,它是一個(gè)對(duì)象,默認(rèn)情況下這個(gè)對(duì)象有一個(gè) constructor 屬性指向函數(shù)本身。當(dāng)你用構(gòu)造函數(shù)創(chuàng)建實(shí)例時(shí),實(shí)例內(nèi)部會(huì)有一個(gè)指針(通常稱(chēng)為 __proto__)指向構(gòu)造函數(shù)的 prototype。

舉個(gè)例子:

Understanding the JavaScript Prototype Chain
function Person() {}
const p1 = new Person();
console.log(p1.__proto__ === Person.prototype); // true

這說(shuō)明實(shí)例的 __proto__ 指向了構(gòu)造函數(shù)的原型對(duì)象。

比如:

function Animal() {}
Animal.prototype.eat = function () {
  console.log('Eating...');
};

function Dog() {}
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.bark = function () {
  console.log('Woof!');
};

const myDog = new Dog();
myDog.eat(); // Eating...

這里,Dog 的原型繼承自 Animal 的原型,所以 myDog 實(shí)例可以訪問(wèn) eat 方法。這就是原型鏈的作用:實(shí)現(xiàn)繼承。

如何正確設(shè)置原型鏈?

設(shè)置原型鏈時(shí)有幾點(diǎn)需要注意:

  • 使用 Object.create() 來(lái)設(shè)置原型更清晰安全
  • 不要直接賦值構(gòu)造函數(shù)的 prototype 為另一個(gè)構(gòu)造函數(shù)的實(shí)例(雖然可行但容易出錯(cuò))
  • 記得重置 constructor 屬性,否則可能誤導(dǎo)后續(xù)使用

常見(jiàn)做法如下:

  • 創(chuàng)建子類(lèi)的原型對(duì)象時(shí),用 Object.create(SuperClass.prototype)
  • 在子類(lèi)原型上添加自己的方法
  • 如果需要,手動(dòng)指定 constructor 指向子類(lèi)

原型鏈中的常見(jiàn)問(wèn)題

有些開(kāi)發(fā)者會(huì)在修改原型后遇到奇怪的問(wèn)題,比如:

  • 忘記用 new 調(diào)用構(gòu)造函數(shù)導(dǎo)致 this 指向錯(cuò)誤
  • 多層繼承時(shí)沒(méi)有正確設(shè)置原型鏈,導(dǎo)致找不到方法
  • 修改原型順序不對(duì),覆蓋了已有的定義

另外,原型鏈不是無(wú)限長(zhǎng)的。查到最后一個(gè)原型是 null 就結(jié)束了。例如:

console.log(Object.prototype.__proto__); // null

基本上就這些。原型鏈看起來(lái)有點(diǎn)繞,但只要理解“對(duì)象通過(guò) __proto__ 找屬性”的機(jī)制,再結(jié)合實(shí)際代碼練習(xí),很快就能掌握。

以上是了解JavaScript原型鏈的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Stock Market GPT

Stock Market GPT

人工智能驅(qū)動(dòng)投資研究,做出更明智的決策

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門(mén)話(huà)題

什么是原型和原型鏈 什么是原型和原型鏈 Nov 09, 2023 pm 05:59 PM

原型,js中的一個(gè)對(duì)象,用于定義其他對(duì)象的屬性和方法,每個(gè)構(gòu)造函數(shù)都有一個(gè)prototype屬性,這個(gè)屬性是一個(gè)指針,指向一個(gè)原型對(duì)象,當(dāng)創(chuàng)建新對(duì)象時(shí),這個(gè)新對(duì)象會(huì)從其構(gòu)造函數(shù)的prototype屬性繼承屬性和方法。原型鏈,當(dāng)試圖訪問(wèn)一個(gè)對(duì)象的屬性時(shí),js會(huì)首先檢查這個(gè)對(duì)象是否有這個(gè)屬性,如果沒(méi)有,那么js會(huì)轉(zhuǎn)向這個(gè)對(duì)象的原型,如果原型對(duì)象也沒(méi)有這個(gè)屬性,會(huì)繼續(xù)查找原型的原型。

原型和原型鏈有什么區(qū)別 原型和原型鏈有什么區(qū)別 Nov 09, 2023 pm 04:48 PM

原型和原型鏈的區(qū)別是:1、原型是每個(gè)對(duì)象都具有的屬性,包含了一些共享的屬性和方法,用于實(shí)現(xiàn)對(duì)象之間的屬性和方法的共享和繼承,而原型鏈?zhǔn)且环N通過(guò)對(duì)象之間的原型關(guān)系來(lái)實(shí)現(xiàn)繼承的機(jī)制,定義了對(duì)象之間的繼承關(guān)系,使得對(duì)象可以共享原型對(duì)象的屬性和方法;2、原型的作用是定義對(duì)象的共享屬性和方法,使得多個(gè)對(duì)象可以共享同一個(gè)原型對(duì)象的屬性和方法,而原型鏈的作用是實(shí)現(xiàn)對(duì)象之間的繼承關(guān)系等等。

什么作用域鏈和原型鏈 什么作用域鏈和原型鏈 Nov 13, 2023 pm 01:46 PM

作用域鏈和原型鏈?zhǔn)荍avaScript中兩個(gè)重要的概念,分別對(duì)應(yīng)著作用域和繼承兩個(gè)核心特性:1、作用域鏈?zhǔn)荍avaScript中用來(lái)管理變量訪問(wèn)和作用域的機(jī)制,其形成是由函數(shù)創(chuàng)建時(shí)所處的執(zhí)行上下文環(huán)境和詞法作用域決定的;2、原型鏈?zhǔn)荍avaScript中實(shí)現(xiàn)繼承的機(jī)制,基于對(duì)象之間的原型關(guān)系,當(dāng)訪問(wèn)對(duì)象的屬性或方法時(shí),如果該對(duì)象本身沒(méi)有定義,會(huì)沿著原型鏈向上查找。

原型和原型鏈的存在意義是什么? 原型和原型鏈的存在意義是什么? Jan 13, 2024 pm 12:58 PM

原型和原型鏈存在的原因是為了實(shí)現(xiàn)JavaScript語(yǔ)言中的繼承和對(duì)象屬性的共享。在JavaScript中,一切皆為對(duì)象,包括函數(shù)。每個(gè)對(duì)象都有一個(gè)屬性,稱(chēng)為原型(prototype),它指向另一個(gè)對(duì)象,該對(duì)象被稱(chēng)為原型對(duì)象。對(duì)象可以從原型對(duì)象中繼承屬性和方法。通過(guò)原型實(shí)現(xiàn)共享屬性和方法的好處是節(jié)省內(nèi)存??紤]一個(gè)對(duì)象A,它有一些屬性和方法,然后創(chuàng)建對(duì)象B并使

原型和原型鏈有什么特點(diǎn) 原型和原型鏈有什么特點(diǎn) Nov 09, 2023 pm 04:38 PM

原型的特點(diǎn)是:1、原型是一個(gè)普通的對(duì)象,它可以擁有屬性和方法,就像任何其他對(duì)象一樣;2、在創(chuàng)建對(duì)象時(shí),會(huì)自動(dòng)關(guān)聯(lián)一個(gè)原型。當(dāng)我們創(chuàng)建一個(gè)新對(duì)象時(shí),JavaScript將自動(dòng)為該對(duì)象分配一個(gè)原型,并將其與對(duì)象相關(guān)聯(lián);3、對(duì)象可以通過(guò)原型鏈訪問(wèn)原型的屬性和方法;原型鏈的特點(diǎn)是:1、每個(gè)對(duì)象都有一個(gè)原型,當(dāng)訪問(wèn)一個(gè)對(duì)象的屬性時(shí),如果該對(duì)象本身沒(méi)有該屬性,則會(huì)在原型對(duì)象中查找等等。

es6中什么是原型鏈 es6中什么是原型鏈 Nov 15, 2022 pm 07:28 PM

原型鏈,簡(jiǎn)單理解就是原型組成的鏈。當(dāng)訪問(wèn)一個(gè)對(duì)象的某個(gè)屬性時(shí),會(huì)先在這個(gè)對(duì)象本身屬性上查找,如果沒(méi)有找到,則會(huì)去它的__proto__隱式原型上查找,即它的構(gòu)造函數(shù)的prototype,如果還沒(méi)有找到就會(huì)再在構(gòu)造函數(shù)的prototype的__proto__中查找,這樣一層一層向上查找就會(huì)形成一個(gè)鏈?zhǔn)浇Y(jié)構(gòu),被稱(chēng)為原型鏈。

See all articles