**
javascript从入门到跑路-----小文的js学习笔记(1)---------script、alert、document。write() 和 console.log 标签
javascript从入门到跑路-----小文的js学习笔记(2)--------- 语法构成、关键字和保留字、变量
javascript从入门到跑路-----小文的js学习笔记(3)---------javascript中的几种数据类型
…
…
javascript从入门到跑路-----小文的js学习笔记目录
**
关注我,我们一起学习进步。
1、原型链
将一个实例的属性和方法给予到另一个实例的原型上
举个栗子:这样你可以看到这两个构造函数出来 两个都是独立的
然后我们将其连接起来
执行结果:你可以看到我们打出dx 的name 属性就是 我们上面Father 的属性
但是它也有 缺点 :
(1)当我们创建了多个实例之后,我们一旦更改了一个实例的属性之后,那其他的实例的属性也会被修改,因为他们是共享的;
(2)当我们创建子类实例的时候,无法向父类构造函数传递参数
2、借用构造函数
相当于是复制了一份父类的属性 然后将其借用给 子类
举个栗子:
执行结果:这样我们的 Son 对象里 也拥有了 Father 的属性
这种方式解决了上面 一旦一个 子类实例 属性更改之后,导致其他子类的属性被一起更改 的情况。
并且该种方式,在创建子类实例时,可以向父类构造函数传递参数
缺点:
无法实现复用,每一个子类实例都有一个新的函数,如果实例对象多了,就会导致内存消耗过大。
3、组合继承
组合继承就是将 上面的两种方式结合起来 ,可以达到取长补短的效果
执行结果:这也是能达到 的
当然 既然是两种方式取长补短之后形成的 一种方式,那么它的优点具有:
(1)不存在共享属性,一个实例属性更改导致其他实例属性更改的情况。
(2)它可以传递参数
(3)方法可复用
缺点 : 子类原型上会有一份 多余的父类实例的属性
4、原型式继承
用一个函数来生出一个新的对象,相当于这个对象就是复制的上一个对象,只不过是利用函数的形式来进行复制。
举个栗子:
//我们创建一个dx对象
var dx = {
//添加 一个 name属性和 weight 属性
name : "老鸭子",
weight : "50kg"
}
//这个是用来生成 新对象的函数
function fn(cx){
//首先里面需要一个构造函数
function Fn(){
}
Fn.prototype = cx;
return new Fn();
}
var dx1 = fn(dx);
alert(dx1.name);
执行结果:这样相当于你便创造出来了一个新的对象 dx1
你可以弹出它的名字 同样是“老鸭子”
这种方式有其优点也有其缺点
优点 : 它是从已有的对象繁衍出来的新的对象,不需要创建自定义类型
缺点: (1)因为它们是共用的一个地址,那么有一个属性改变,那么会影响所有的对象相同的属性进行改变。
(2)无法实现代码复用,因为属性是后添加的,没用到函数封装。
5、寄生式继承
寄生式继承 首先会创建一个新的对象,然后可以为其(添加属性或方法),然后返回对象。
举个栗子:
function fn(obj){
//这里是一个构造函数
function Fn(){
}
Fn.prototype = obj;
return new Fn();
}
//这里是寄生 生成新对象 并且为其添加新的属性和方法的地方
function jsdx(obj){
//js为随便命名的一个参数
var js = fn(obj);
//添加属性
js.weight = "20kg"
//返回
return js
}
//这是我们的一个对象
function Dx(){
this.name = "大鸭子";
}
//那么 新的对象 obj1 既继承了 原对象 的 name 属性 也被添加了上面的 weight 属性
var obj1 = new jsdx(new Dx())
alert(obj1.weight);
执行结果:你可以看到 弹出 weight
6、寄生组合式继承
寄生组合式继承就是将两种方式进行结合
举个栗子:
function fn(obj){
function Fn(){
}
Fn.prototype = obj;
return new Fn();
}
function Dx(){
this.name = "大鸭子";
this.weight = "50kg"
}
function Dx2(){
Dx.call(this)
}
var obj1 = fn(Dx.prototype0);
obj1.constructor = Dx2;
Dx. prototype = obj1;
var obj2 = new Dx2()
alert(obj2.weight);
执行结果:
优点:修正了上面组合继承的缺点,只使用了一次构造函数
缺点:就是写着十分繁琐。
**
关注 校园君有话说 公众号 ,回复 web前端 免费领取50G 前端学习资料 一份 ,我们一起学习进步吧。
转载:https://blog.csdn.net/qq_45948983/article/details/108424785