欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

javascript 原型鏈圖

錢艷冰1年前6瀏覽0評論

JavaScript是一門基于原型繼承的語言,而原型鏈則是JavaScript中的重要概念之一。理解原型鏈對于掌握JavaScript面向?qū)ο缶幊毯统绦蛘{(diào)試都起到至關重要的作用。接下來我們就來梳理一下原型鏈的相關知識。

首先,什么是原型?原型是JavaScript中的一個對象,它可以看作是其他對象的基礎模板,其他對象可以通過原型繼承它的屬性和方法。每個JavaScript對象(除了null,即沒有基礎模板的對象)都有一個原型對象,該原型對象一般也是一個JavaScript對象。

let obj = {
name: 'Jerry'
};
console.log(obj.__proto__); // 輸出: {}
let arr = [];
console.log(arr.__proto__); // 輸出: []

上面的例子中,obj和arr都是JavaScript對象,它們有自己的屬性和方法,同時也都有一個__proto__的屬性,表示它們的原型對象。由于沒有為obj和arr指定原型,所以它們的原型對象都是默認的空對象。

接下來,我們再來看一下JavaScript中創(chuàng)建對象的幾種方式:

// 使用對象字面量
let person = {
name: 'Tom'
};
// 使用構(gòu)造函數(shù)
function Person(name) {
this.name = name;
}
let p = new Person('Tom');
// 使用Object.create方法
let proto = { name: 'Tom' };
let obj = Object.create(proto);

這三種方式都可以創(chuàng)建JavaScript對象,并且都涉及到了對象和原型關系的問題。下面我們就具體來看一下原型鏈的形成過程。

當我們創(chuàng)建一個對象時,該對象會從它的構(gòu)造函數(shù)的原型對象上繼承屬性和方法。舉個例子:

function Person(name) {
this.name = name;
}
Person.prototype.sayHello = function() {
console.log('Hello, my name is ' + this.name + '.');
};
let p = new Person('Tom');
p.sayHello(); // 輸出:Hello, my name is Tom.

在上面的例子中,我們創(chuàng)建了一個構(gòu)造函數(shù)Person,它定義了一個屬性name和一個原型方法sayHello。Person的實例p繼承了它的原型對象Person.prototype上的sayHello方法,并且可以通過自己的name屬性使用該方法。

如果一個對象在自己的原型鏈上找不到某個屬性或方法,那么它會通過原型鏈向上尋找,直到找到了該屬性或方法,或者到達原型鏈的頂端(Object.prototype)為止。舉個例子:

function A() {}
function B() {}
B.prototype = new A();
let b = new B();
console.log(b.toString()); // 輸出:[object Object]

上面的例子中,我們定義了兩個構(gòu)造函數(shù)A和B。B的原型對象是一個A的實例。當我們通過實例b調(diào)用它的toString()方法時,b會從自己的原型對象B.prototype上找toString()方法,但是B.prototype上面沒有toString()方法,所以它會繼續(xù)向上查找,在A.prototype和Object.prototype上都沒有找到toString()方法,最終在Object.prototype找到了toString()方法并調(diào)用。

總的來說,原型鏈是由每個對象的__proto__屬性串聯(lián)起來的,它描述了JavaScript對象之間的繼承關系以及屬性訪問的規(guī)則。