原型鏈繼承

2021-09-22 08:24:11 字數 3469 閱讀 6578

一、例項化物件: 給物件增加屬性和方法

function person(name, age) 

person.prototype.sayhi = function()

任何乙個建構函式都有乙個屬性 prototype 原型

這個原型是乙個物件,這個物件中所有的屬性和方法都可以可以被建構函式建立的例項訪問。

二、建構函式與原型和例項的關係

1. 建構函式和原型的關係: 配偶的關係 每乙個建構函式都會有乙個對應的原型, 建構函式的prototype屬性指向了原型物件, 原型物件的constructor屬性指向了建構函式。

2. 建構函式 和例項的關係: 母子關係,例項 是由建構函式new出來的, 並且例項的屬性是在建構函式中增加的

3. 原型物件與例項的關係: 父子,原型物件中所有的成員 都可以 被例項訪問。 例項.__proto__ = person.prototype

三、原型鏈

任何乙個物件都會有原型,原型又是個物件, 原型物件還會有原型,一環扣一環,原型之間就組成了原型鏈。

乙個物件,除了可以訪問自己的成員, 還可以訪問原型的成員,可以訪問整條原型鏈上的成員。

function person(name, age) 

person.prototype.money = 100;

person.prototype.car = '摩拜';

person.prototype.sayhi = function()

原型鏈: p -----> p.__proto___(person.prototype)  ----> p.__proto__.__proto__

var p = new person('zs', 18);

console.log(p.money);// 100

console.log(p.tostring());// [object object]

四、object.prototype

所有的物件都有原型 ,所有物件的原型鏈的盡頭一定是object.prototype

object.prototype中的成員是可以被所有物件訪問的。

五、hasownproperty:用於判斷 某個屬性是否是物件自己的,而不是繼承來的

object.prototype.money = 1000;

var obj = ;

判斷name是否是obj物件自己的屬性

var result = obj.hasownproperty('money');

console.log(result);// false

六、a.isprototypeof(b) : 判斷a是否是b的原型

function person(name) 

var p = new person();

console.log(person.isprototypeof(p));// false

console.log(person.prototype.isprototypeof(p));// true

console.log(object.prototype.isprototypeof(p));// true

typeof: 僅僅能夠判斷簡單的資料型別,對於複雜的資料型別,返回的全是object

嚴格的判斷乙個物件的型別,應該用instranceof

七、a instanceof b: 判斷a是否是b的例項(內在的邏輯是:判斷b的原型是否在a的原型鏈上)

function person(name) 

var p = new person();

// 原型鏈:p -----> person.prototype ------> object.prototype

console.log(p instanceof person);// true

console.log(p instanceof object);// true

任何物件 instanceof object true

任意的函式 instance function true

function ---> function.prototype ---> object.prototype ---> null

object ------ > function.prototype ----> object.prototype ---> null

所有的函式都是由function建立出來,所有函式.__proto__ 都是function.prototype

所有的原型都是由object建立出來 所有原型.__proto__ 都是object.prototype

function 建構函式也是函式, function的媽媽 是function  function的爸爸 是function.prototype

function fn() {}

fn.money = 100

fn.prototype.car = '瑪莎拉蒂'

function.prototype.house = '別墅'

object.prototype.girl = '小姐姐'

var f = new fn()

// f---> fn.prototype ----> object.prototype

// console.log(f.money) // undefined

// console.log(f.car) // 瑪莎拉蒂

// console.log(f.house) // undefined

// console.log(f.girl) // 小姐姐

// fn ---> function.prototype ---> object.prototype

console.log(fn.money) // 100

console.log(fn.car) // undefined

console.log(fn.house) // 別墅

console.log(fn.girl) // 小姐姐

原型 原型鏈 繼承

原型 是function物件的乙個屬性,它定義了建構函式 製造出的物件 的公共祖先。通過該建構函式產生的物件,可以繼承該原型的屬性和方法。原型也是物件 這定義有點模糊,用 解釋一下 我們在控制台中列印出了這個,首先son物件的建構函式是foo,但是我們的foo中什麼屬性都沒有,怎麼會出現乙個 pro...

原型 原型鏈 繼承

在 js 中,一切皆物件!下面就讓我們從建立物件開始,逐步學習js中的核心知識 原型,原型鏈,繼承等 1.字面量方式建立物件 var obj var obj1 2.使用 new object 的方式建立物件 var obj2 new object obj2.name 張三 obj2.age 13 o...

原型鏈繼承

原型及原型鏈 1.所有的函式都有乙個prototype的屬性 指標 該屬性指向了這個函式的原型物件。2.所有的物件都有乙個 proto 的屬性 指標 該屬性指向了這個物件的原型物件。每乙個原型物件也都有乙個 proto 的屬性,指向它的父級原型物件,最終指向null物件 原型鏈 3.第乙個原型物件都...