JS繼承的幾種方式

2021-09-22 13:57:38 字數 2652 閱讀 5214

就是將物件的成員複製乙份給需要繼承的物件

// 建立父物件

var superobj =

}// 建立需要繼承的子物件

var subobj = {};

// 開始拷貝屬性(使用for...in...迴圈)

for( var i in superobj )

console.log(subobj)

console.log(superobj)

如果繼承過來的成員是引用型別的話,那麼這個引用型別的成員在父物件和子物件之間是共享的,也就是說修改了之後, 父子物件都會受到影響.

借用建構函式的原型物件實現繼承

// 建立父建構函式

function superclass(name)

}// 設定父構造器的原型物件

superclass.prototype.showage = function()

// 建立子建構函式

function subclass()

// 設定子建構函式的原型物件實現繼承

subclass.prototype = superclass.prototype;

var child = new subclass()

父建構函式的原型物件和子建構函式的原型物件上的成員有共享問題

只能繼承父建構函式的原型物件上的成員, 不能繼承父建構函式的例項物件的成員

父建構函式的原型物件和子建構函式的原型物件上的成員有共享問題

只能繼承父建構函式的原型物件上的成員, 不能繼承父建構函式的例項物件的成員

// 建立父建構函式

function superclass()

}// 設定父建構函式的原型

superclass.prototype.friends = ['小名', '小強'];

superclass.prototype.showage = function()

// 建立子建構函式

function subclass()

// 實現繼承

subclass.prototype = new superclass();

// 修改子建構函式的原型的構造器屬性

subclass.prototype.constructor = subclass;

var child = new subclass();

console.log(child.name); // liyajie

console.log(child.age);// 25

child.showname();// liyajie

child.showage();// 25

console.log(child.friends); // ['小名','小強']

// 當我們改變friends的時候, 父建構函式的原型物件的也會變化

child.friends.push('小王八');

console.log(child.friends);["小名", "小強", "小王八"]

var father = new superclass();

console.log(father.friends);["小名", "小強", "小王八"]

不能給父建構函式傳遞引數,父子建構函式的原型物件之間有共享問題

// 建立父建構函式

function person(name)

}// 建立子建構函式

function student(name)

// 測試是否有了 person 的成員

var stu = new student('li');

stu.showname(); // li

console.log(stu.friends); // ['小王','小強']

借用建構函式 + 原型式繼承

// 建立父建構函式

function person(name,age)

}// 設定父建構函式的原型物件

person.prototype.showage = function()

// 建立子建構函式

function student(name)

// 設定繼承

student.prototype = person.prototype;

student.prototype.constructor = student;

上面**解決了 父建構函式的屬性繼承到了子建構函式的例項物件上了,並且繼承了父建構函式原型物件上的成員解決了給父建構函式傳遞引數問題

function person(name,age)

}person.prototype.friends = ['小王','小強','小王八'];

function student(name,25)

// 使用深拷貝實現繼承

deepcopy(student.prototype,person.prototype);

student.prototype.constructor = student;

這樣就將person的原型物件上的成員拷貝到了student的原型上了, 這種方式沒有屬性共享的問題.

原文:

js繼承幾種方式

js作為物件導向的弱型別語言,繼承也是其非常強大的特性之一。那麼如何在js中實現繼承呢?讓我們拭目以待。既然要實現繼承,那麼首先我們得有乙個父類,如下 定義乙個動物類 function animal name 原型方法 animal.prototype.eat function food 核心 將父...

幾種js的繼承方式

1 繼承第一種方式 物件冒充 function super username function sub username var supernew new super super var subnew new sub sub supernew.hello subnew.hello subnew.wo...

js的幾種繼承方式

方式一 原型鏈繼承 function parent parent.prototype.getparentname function 子類 function child 下面這步實現繼承,這步需要放在getchildname 之前,不然獲得子類方法無法使用 child.prototype new pa...