最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文徹底理解JavaScript原型與原型鏈

 更新時(shí)間:2026年06月23日 11:27:31   作者:許我半盞清茶  
在JavaScript中原型鏈?zhǔn)菍?shí)現(xiàn)對象繼承的核心機(jī)制,通過原型鏈,JavaScript能夠讓對象共享屬性和方法,從而實(shí)現(xiàn)代碼的重用和更靈活的對象模型,這篇文章主要介紹了JavaScript原型與原型鏈的相關(guān)資料,需要的朋友可以參考下

前言

如果你學(xué)習(xí) JavaScript,卻不理解原型和原型鏈,那就像學(xué)會了寫句子卻不理解語法規(guī)則。原型是 JavaScript 實(shí)現(xiàn)面向?qū)ο缶幊痰暮诵臋C(jī)制,也是面試中幾乎必考的知識點(diǎn)。本文將帶你徹底理解 JavaScript 的原型與原型鏈。

一、原型(prototype)是什么

1.1 原型的定義

在 JavaScript 中,原型(Prototype)是函數(shù)天生擁有的一個屬性。每當(dāng)你定義一個函數(shù)時(shí),JavaScript 引擎會自動為這個函數(shù)添加一個 prototype 屬性,這個屬性的值是一個對象。

1.2 為什么要用原型?

  1. 我們可以將一些屬性和方法掛載在原型上,在創(chuàng)建實(shí)例之后,實(shí)例就可以調(diào)用這些屬性和方法
  2. 我們也可以將一些公用的屬性和方法添加在原型上,減少構(gòu)造函數(shù)在執(zhí)行時(shí)的性能開銷
function Car(color) { this.color = color; }
Car.prototype.name = 'su7';

const car1 = new Car('紅');
const car2 = new Car('藍(lán)');
console.log(car1.name === car2.name); // true,共享屬性

1.3 原型三大特性

特性說明
函數(shù)天生擁有每個函數(shù)都有 prototype
實(shí)例可訪問實(shí)例能調(diào)用原型上的方法
實(shí)例無法修改修改實(shí)例只會創(chuàng)建自身屬性,不會影響原型
Car.prototype.name = 'su7';
const car = new Car('藍(lán)');
car.name = '蔚來';     // 創(chuàng)建實(shí)例自身屬性
console.log(Car.prototype.name); // su7,原型不受影響

二、隱式原型 (__ proto__)

2.1 什么是隱式原型

所有對象都有 __proto__ 屬性,指向創(chuàng)建該對象的構(gòu)造函數(shù)的原型:

function Person() {}
const p = new Person();

console.log(p.__proto__ === Person.prototype); // true

2.2 屬性查找規(guī)則

v8 在訪問對象中的一個屬性時(shí),會先訪問對象中顯示存在的屬性,如果沒有,就會去對象的隱式原型上查找

Car.prototype.name = 'su7';
function Car(color) { this.color = color; }

const car = new Car('blue');
console.log(car.name);  // su7(原型上找到)
console.log(car.color); // blue(自身屬性)

2.3 核心公式

實(shí)例.__proto__ === 構(gòu)造函數(shù).prototype
構(gòu)造函數(shù).prototype.constructor === 構(gòu)造函數(shù)

2.4 constructor 屬性

原型上的 constructor 指向構(gòu)造函數(shù),記錄實(shí)例的創(chuàng)建者:

function Person() {}
console.log(Person.prototype.constructor === Person); // true

四、原型鏈詳解

4.1 原型鏈查找

v8 在訪問對象中的一個屬性時(shí),會先訪問對象中顯示存在的屬性,如果沒有,就會去對象的隱式原型上查找,如果還沒有,就會順著隱式原型一直往上找,直到找到 null 為止,這個查找關(guān)系,就叫原型鏈查找

4.2 原型鏈繼承

原型鏈?zhǔn)菍?shí)現(xiàn)繼承的核心機(jī)制:

Grand.prototype.house = function() { console.log('湯臣一品'); };
function Grand() { this.card = 100000000; }

Father.prototype = new Grand();
function Father() { this.lastName = '張'; }

Child.prototype = new Father();
function Child() { this.age = 18; }

const p = new Child();
p.house(); // 湯臣一品(通過原型鏈找到)

4.3 完整原型鏈

const f1 = new Foo()

1.f1.__proto__ = Foo.prototype

2.Foo.prototype.__proto__ = Object.prototype

3.Object.prototype.__proto__ = null

4.Foo.__proto__ = Function.prototype

5.Function.prototype.__proto__ = Object.prototype

6.Function.__proto__ = Function.prototype

五、總結(jié)

原型與原型鏈?zhǔn)?JavaScript 實(shí)現(xiàn)面向?qū)ο蟮暮诵臋C(jī)制。每個函數(shù)都有 prototype 屬性指向原型對象,每個對象都有 __proto__ 指向構(gòu)造函數(shù)的原型,它們通過 constructor 形成緊密聯(lián)系。屬性查找時(shí),JS 會沿著 __proto__ 形成的鏈向上查找,直到 null .

到此這篇關(guān)于JavaScript原型與原型鏈的文章就介紹到這了,更多相關(guān)JS原型與原型鏈內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

武穴市| 湘乡市| 留坝县| 溆浦县| 丘北县| 新巴尔虎右旗| 黑龙江省| 沙洋县| 永川市| 长顺县| 自治县| 鄄城县| 罗山县| 远安县| 兰溪市| 花垣县| 依安县| 永善县| 赣州市| 辉南县| 清徐县| 蕉岭县| 搜索| 定安县| 盘锦市| 阿坝县| 沅陵县| 黄石市| 朝阳市| 湖州市| 永登县| 清水县| 祥云县| 恩平市| 电白县| 高雄县| 土默特左旗| 萨迦县| 迁西县| 建始县| 松原市|