视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
几种js继承的式分享
2020-11-27 20:01:52 责编:小采
文档


本文主要和大家分享几种js继承的式分别有原型继承、借用构造函数继承、组合继承、寄生式继承、寄生组合方式继承,希望能帮助到大家。

原型式继承

可以在不必预先定义构造函数的情况下实现继承,其本质是执行给定对象的浅复制。而复制得到的副本还可以得到进一步的改造

function parent(o) {
 this.username = 'father'; this.array = [1,2,3]
}function child() {
 this.age = 20}
child.prototype = new Parent();

缺点:
1. 父类和子类公用原型链上的引用变量。
2. 创建子类实例是无法向父类的构造函数传递参数

借用构造函数继承

借用父类的构造函数来增强子类的实例,就是说,相当于复制一份父类的属性或者方法给子类了

function Parent(name,arr) {
 this.name = name; this.arr = arr; this.run = function() {
 console.log('run function')
 }
}function Child(name, arr) {
 this.age = 20;
 Parent.call(this,name,arr);
}var obj1 = new Child('zhang san', [1,2,3]);var obj2 = new Child('zhang san', [1,2,3]);
obj1.arr[0] = 'hello'console.log(obj1.arr[0]); // helloconsole.log(obj2.arr[0]); // 1

优点:
1.解决了子类实例共享父类引用属性的问题
2.创建子类实例时,可以向父类构造函数传递参数
缺点:
1.无法实现复用,每一个子类实例都有一个新的run函数,如果实例的对象多了,内存消耗过大

组合式继承

组合继承避免了原型链和借用构造函数的缺陷,融合它们的优点。

function Parent(name,arr) {
 this.name = name; this.arr = arr;
}
Parent.prototype.run = function() {
 console.log('run function');
}function Child(naem,arr) {
 this.age = '20';
 Parent.call(this,name,arr); // 借用构造函数 ==》 核心语句 1》不能复用}
Child.prototype = new Parent(); // 原型链 ==》 核心语句 1》父构造函数不能传递参数 2》arr是引用属性,一个改变,互相影响

优点:
1.不存在引用属性共享的问题
2.可传递参数
3.方法可复用
缺点:
子类原型上右一份多余的父类实例的属性

寄生式继承

与原型式继承非常相似,也是基于某个对象或某些信息创建一个对象,然后增强对象,最后返回对象。

function createAnother(original) {
 var clone = Object.create(original); //
 clone.sayHi = function() {
 console.log(Hi) 
 } return clone;var Person = {
 name: 'Blob',
 friends: ['Shelby', 'Court', 'Van'];
}var anotherPerson = createAnother(person);
anotherPerson.sayHi(); // Hi

寄生组合式继承

组合继承是js最常用的继承模式,组合继承最大的问题就是无论在什么情况下,都会调用两次构造函数:一次是在创建子类型原型时,另一次是在子类型构造函数的内部。

function beget(obj){ // 生孩子函数 beget:龙beget龙,凤beget凤。
 var F = function(){};
 F.prototype = obj; return new F();
}function Super(){
 // 只在此处声明基本属性和引用属性
 this.val = 1; this.arr = [1];
}// 在此处声明函数Super.prototype.fun1 = function(){};
Super.prototype.fun2 = function(){};//Super.prototype.fun3...function Sub(){
 Super.call(this); // 核心
 // ...}var proto = beget(Super.prototype); // 核心proto.constructor = Sub; // 核心Sub.prototype = proto; // 核心var sub = new Sub();
alert(sub.val);
alert(sub.arr);

下载本文
显示全文
专题