JavaScript實現繼承方式

2021-08-15 02:47:12 字數 1960 閱讀 2650

student.prototype = new person();

得到乙個 person 例項,並且這個例項指向構造器的 prototype 屬性和呼叫了建構函式,因為呼叫的建構函式,而 student 只是乙個類,並沒有例項化,只為了繼承,呼叫建構函式建立乙個例項,引數的問題就不容易解決。

例如:當 person() 中有乙個 name 屬性時,而 student 上也有 name 屬性時,當

student.prototype = new person(); person 上的 name:undefined ,並且 student 永遠不會用到 person 上的 name 性,如果 person 上有很多這樣的屬性情況可想而知。

new 操作符所做的事情(var a = new a())

a.首先生成乙個空物件 a = {} ,它是 object 的例項

b.設定 a 的原型鏈 a.proto = a.prototype

c.a.call(a), a 的 this 指向 a,並執行 a 的函式體

d.判斷 a 的返回值型別,

如果 『沒有返回值』 或者 『返回值型別為值型別』 返回 this 即 a (this === a),

如果有返回值,並且返回值型別為引用型別,就返回這個引用型別的物件,替換掉 a

123

45

var a = function()

var a = new a();

console.log(a) //object{}

解釋:首先 this === a, 但是 a 返回的是 this.proto (a.proto), this.proto 指向了原型物件 object() 建構函式建立的 object 物件,它是乙個引用型別,它替換掉 a ,所以這裡的變數 a 是乙個指標,指向它的原型。

console.log(a.prototype === a); //true

此時 a 建構函式的原型和 a 指標(指向 a.proto)是同乙個物件

var obj = object.create();

object.create()是系統內建函式,引數為物件,返回新建立的物件,並且該物件的原型指向引數

建立空物件,並且物件的 proto 指向引數,既繼承了屬性和方法,本身又有自己的空物件,對於自己新增的屬性和方法不會去更改原型上的屬性和方法。

123

4567

8

function person(name)

function student(name,klass)

例:

123

4567

math.max(1,2,3); // 3

math.max([1,2,3]); // nan

math.max.call(null,1,2,3); // 3

math.max.call(null,1,2,3) === math.max(1,2,3); // true

123

4567

891011

1213

1415

1617

1819

2021

2223

2425

function person(name)

person.prototype.sayhi = fucntion()

function student(name,klass)

// 使用 object.create() 繼承方法

student.prototype = object.create(person.prototype,

});// 設定自身方法

student.prototype.learn = function(subject)

javascript實現繼承的幾種主要方法

1.原型鏈繼承 var supclass function name,supclass.prototype var sonclass function name,console.log sonclass.prototype sonclass.prototype new supclass 核心 son...

javascript實現繼承的幾種主要方法

1.原型鏈繼承 var supclass function name,supclass.prototype var sonclass function name,console.log sonclass.prototype sonclass.prototype new supclass 核心 son...

javascript實現繼承的幾種主要方法

1.原型鏈繼承 var supclass function name,supclass.prototype var sonclass function name,console.log sonclass.prototype sonclass.prototype new supclass 核心 son...