最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

千鋒教育JavaScript全套視頻教程(10天學(xué)會Js,前端javascrip

2023-07-12 16:00 作者:是個庸人唉  | 我要投稿

# 原型及繼承

### 原型

#### 概述

原型是一個公共的對象空間,它里面可以儲存對應(yīng)的公共屬性及方法.

#### 構(gòu)造函數(shù)的缺陷

```js

function Person(name){

??this.name = name

??this.sayHello = ()=>{

????console.log('hello')

??} // this.sayHello = new Function.log('hello')

}

// 實(shí)例化對象

let person1 = new Person('jack')

let person2 = new Person('jack')

console.log(person1 == person2) // false

console.log(person1.name == person2.name) // true

console.log(person1.sayHello == person2.sayHello) // false

```

構(gòu)造函數(shù)內(nèi)如果去指定方法那么對應(yīng)的每次實(shí)例化都會開辟專門的函數(shù)空間去存儲對應(yīng)的操作代碼.那沒救意味著我們實(shí)例化的對象越多,需要開辟的函數(shù)救越多,而這些函數(shù)內(nèi)的操作都是一致,這就會造成對應(yīng)的資源浪費(fèi).那么就會損耗對應(yīng)的效率.那么解決這個問題我們就可以利用一個公共空間去存儲對應(yīng)的函數(shù),那么這些函數(shù)找到的地址就是一個.而這個公共空間的名字就是原型.


**一般函數(shù)儲存在原型上,屬性儲存在構(gòu)造函數(shù)內(nèi)**


#### 函數(shù)的原型

`prototype`是函數(shù)內(nèi)的一個公共空間,它是一個對象.它屬于函數(shù)的本事,它屬于函數(shù)本事,它被稱為顯示原型.

**解決構(gòu)造函數(shù)的缺陷,就是將對應(yīng)的函數(shù)存放在對應(yīng)的原型上**

###### 注意事項(xiàng)

- 原型上具備`constructor`屬性 這個屬性指向?qū)?yīng)的構(gòu)造函數(shù)

- 原型上的屬性 可以使用實(shí)例化對象可以直接訪問

- class更c(diǎn)onstructor一級的函數(shù)都是存放在原型上的

- 原型上一般儲存對應(yīng)的函數(shù),構(gòu)造函數(shù)上一般儲存對應(yīng)的屬性


### 對象的原型

`__proto__`是屬于對象的原型,實(shí)例化對象也是對象所有它同樣存在.他指向*其構(gòu)造函數(shù)的原型*,他被稱為隱私原型.

#### 示例

```js

// __proto__是對應(yīng)的對象的一個公共空間

console.log(new Person().__proto__)

// 對象的原型指向其構(gòu)造函數(shù)的原型

console.log(new Person().__proto__ === Person.prototype) // true

```

#### 實(shí)現(xiàn)new方法

```js

// new方法實(shí)現(xiàn)

// 傳入對應(yīng)的構(gòu)造函數(shù)及參數(shù)

function myNew(fn,...arg){

??// 自動構(gòu)建對象 (將當(dāng)前的對象原型指向?qū)?yīng)的構(gòu)造函數(shù))

??let obj = {}

??obj.__proto__ = fn.prototype // 顯示類型

??// 傳入?yún)?shù)執(zhí)行構(gòu)造函數(shù) (填充屬性 屬性賦值)將當(dāng)前構(gòu)造的對象替代里面的this

??fn.apply(obj,obj) // 屬性賦值

??// 自動返回構(gòu)造的對象

??return obj

???

}

let newPerson = myNew(Person)

```

###### 注意事項(xiàng)

`__proto__`指向其構(gòu)造函數(shù)的prototype

`__proto__`非javaScript標(biāo)準(zhǔn)(瀏覽器支持)

##### 問題

對象的原型為__proto__,它指向?qū)?yīng)構(gòu)造函數(shù)的prototype.這個構(gòu)造函數(shù)的prototype也是一個對象,那么它同樣也具備對應(yīng)的__proto__,那么對應(yīng)的構(gòu)造函數(shù)的原型對象的__proto__又指向誰?

**對應(yīng)的指向從當(dāng)前的構(gòu)造函數(shù)的prototype一直到null為止 而這個指向的過程其實(shí)是就原型鏈查找的過程**

### 原型鏈

在原型向上查找屬性的過程構(gòu)成的鏈條(不斷在__proto__查找)稱為原型鏈

##### 原型鏈的查找過程

- 查找自身的__proto__是否具備屬性找到就返回屬性值

- 不斷向上查找對應(yīng)的父類構(gòu)造函數(shù)的prototype是否具備這個屬性 找到返回值

- 一直查到Object的prototype上是否具備這個屬性 找到返回屬性值

- 如果Object的prototype上還沒有找到就會去找null 返回undefined

千鋒教育JavaScript全套視頻教程(10天學(xué)會Js,前端javascrip的評論 (共 條)

分享到微博請遵守國家法律
深圳市| 门源| 余江县| 虹口区| 长子县| 惠安县| 漳浦县| SHOW| 长汀县| 江源县| 科尔| 乐陵市| 大石桥市| 大庆市| 沐川县| 广水市| 文安县| 涟源市| 财经| 沾化县| 娱乐| 寻甸| 兴文县| 盘锦市| 什邡市| 宣化县| 洛扎县| 吐鲁番市| 杭锦后旗| 齐河县| 普兰店市| 乌审旗| 德清县| 黄陵县| 越西县| 海丰县| 门源| 都昌县| 开鲁县| 吉水县| 原平市|