js 原型繼承分析

2021-08-04 22:43:05 字數 2476 閱讀 6800

1、繼承上下文

//人

function

person

(lastname,firstname,gender)

//作家

function

writer

(lastname,firstname,gender,worksname)

//給作家新增原型方法

writer.prototype.introduce=function

()//例項化作家蘇洵

var writer=new writer('蘇','洵','mela','六國論');

writer.introduce();/*我叫 蘇 洵

性別 mela

我的成名作是 六國論*/

2、繼承原型

關於原型、原型鏈不了解可以戳這js 原型、原型鏈、構造器關係

//人

function

person

(lastname,firstname,gender)

person.prototype=,

breathe()

}//作家

function

writer

(lastname,firstname,gender,worksname)

//原型繼承

writer.prototype=new person();

//或者writer.prototype=object.create(person.prototype);

writer.prototype.constructor=writer;

writer.prototype.introduce=function

()writer.prototype.init='老子可是筆下生花的作家呀';

var writer=new writer('蘇','洵','mela','六國論');

writer.eat()//我餓了需要吃飯

writer.breathe()//我不呼吸會死的

writer.introduce()/*我叫 蘇 洵

性別 mela

我的成名作是 六國論*/

console.log(writer.init)//"老子可是筆下生花的作家呀"

分析:writer.prototype=new person()這句**讓write的原型成為person的乙個例項,而new person()的原型鏈(__proto__)指向person的原型(prototype),所以有

writer.prototype.__proto__===person.prototype//true
再看看此時writer的原型

返回的是person物件,但是

writer.prototype===person//

false

new person()當然不等於person

自我理解是writer繼承new person()提供的person方法和屬性後就與person脫離關係這也是為啥不直接用writer.prototype=person.prototype到此writer的例項就可以使用person的原型方法了

分析:writer.prototype=object.create(person.prototype);

object.create(proto, [ propertiesobject ])函式建立乙個指定原型且可選擇性地包含指定屬性的物件

可以先膚淺的認為和writer.prototype=new person()效果一樣

分析:writer.prototype.constructor=writer;

如果缺少這句就有

writer===writer.constructor

//false

writer.constructor===person//true

因為writer的原型的構造器是person,但是缺少這句並不影響繼承

之所以不影響繼承是因為例項writer繼承的方法和屬性有:

writer.__proto__===writer.prototype//true
所以writer就有了introduce方法和init屬性

3、寫在後面

純屬個人理解,有問題請不要留情

js繼承(一)原型繼承

正式開工了 繼承在js中有著很大的地位,同時理解起來也比較抽象,我將分幾篇部落格來記錄js的繼承。原型繼承 相當於將父類物件與子類物件打通橋梁,可以靈活實現追加屬性與行為 子類擁有父類的一切行為和屬性。特點 非常純粹的繼承關係,例項是子類的例項,也是父類的例項 父類新增原型方法 原型屬性,子類都能訪...

js繼承,原型鏈繼承

1 乙個型別的物件能夠訪問另外乙個型別的屬性和方法 2 類與類之間的關係 類就是眾多例項共有的屬性和方法的乙個抽象 function animal name animal.prototype.say function function dog 把子類的原型指向父類的例項 dog.prototype ...

js繼承之原型繼承

物件導向程式設計都會涉及到繼承這個概念,js中實現繼承的方式主要是通過原型鏈的方法。每建立乙個函式,該函式就會自動帶有乙個prototype屬性。該屬性是個指標,指向了乙個物件,我們稱之為原型物件。什麼是指標?指標就好比學生的學號,原型物件則是那個學生。我們通過學號找到唯一的那個學生。假設突然,指標...