博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript继承总结
阅读量:5909 次
发布时间:2019-06-19

本文共 2467 字,大约阅读时间需要 8 分钟。

1.创建对象

1.字面量对象

2.构造函数
3.Object.create

//1.字面量var obj={    name: '字面量',    show: function(){        console.log(this.name)    }}//2.构造函数function fun (name) {    this.name=name}var obj=new fun('obj')//3.Object.createvar obj={name: 'obj'}var obj=Object.create(obj)

2.JavaScript继承

1.原型链继承

function Parent(name){    this.name=name    this.sleep=function(){        console.log(this.name + '在睡觉')    }}Parent.prototype.eat=function(food){    console.log(this.name + '正在吃' + food)}function Child(){}Child.prototype=new Parent('Child')Child.prototype.constructor=Childvar child=new Child()

Child.prototype=new Parent('Child')就是把Parent实例赋值给Child.prototype,也就是说new Child().__proto__===new Parent('Child')

可以通过Child.prototype在原型对象上增加新的属性或方法,也可以通过,child.__proto__在原型对象上添加新的方法和属性。

缺点:

1.原型对象上的属性和方法是所有实例都可访问的,而且一个实例改变了原型上的方法和属性都会影响到其他实例。
2.创建子类实例时,无法向父类构造函数传参。

2.构造函数继承

function Parent(name){    this.name=name    this.sleep=function(){            console.log(this.name + '在睡觉')    }}Parent.prototype.eat=function(food){    console.log(this.name + '正在吃' + food)}function Child(){    Parent.call(this,'child')}Child.prototype.eyes=function(){console.log('eyes')}var child=new Child()

构造函数继承可以通过call或apply方法实现继承。这种方法不能继承原型对象中的属性和方法,只能继承实例属性和实例方法,但是可以向父类传参。

3.组合继承

function Parent(name){    this.name=name    this.sleep=function(){            console.log(this.name + '正在睡觉')    }}Parent.prototype.eat=function(food){    console.log(this.name + '正在吃' + food)}function Child(){    Parent.call(this,'child')}Child.prototype.eyes=function(){console.log('eyes')}Child.prototype=new Parent()Child.prototype.constructor=Child var child=new Child()

组合继承是比较好的继承, 他是原型链继承和构造函数继承的结合, 合理的利用了这两种组合的特点,既是子类的实例,也是父类的实例, 但有一个缺点就是调用了两次构造函数。

4.组合继承优化

function Parent(name){    this.name=name    this.sleep=function(){            console.log(this.name + '正在睡觉')    }}Parent.prototype.eat=function(food){    console.log(this.name + '正在吃' + food)}function Child(){    Parent.call(this,'child')}Child.prototype = Object.create(Parent.prototype)Child.prototype.constructor=Child var child=new Child()

5.寄生组合继承

function Parent(name){    this.name=name    this.sleep=function(){            console.log(this.name + '正在睡觉')    }}Parent.prototype.eat=function(food){    console.log(this.name + '正在吃' + food)}function Child(){    Parent.call(this,'child')}function f(){}f.prototype=Parent.prototypeChild.prototype=new f()Child.prototype.constructor=Child var child=new Child()

只调用一次父类的构造函数,避免了在子类原型上创建不必要的,多余的属性。

转载地址:http://yhvpx.baihongyu.com/

你可能感兴趣的文章
hdu 5452(树链刨分)
查看>>
2015北京网络赛 A题 The Cats' Feeding Spots 暴力
查看>>
PHP全局变量
查看>>
strip, 关于去除目标文件种的不必要信息
查看>>
ios申请真机调试( xcode 5)详细解析
查看>>
BLOCKED和WAITING的区别
查看>>
查看死锁原因 /data/anr/traces.txt
查看>>
暴搜 - Codeforces Round #327 (Div. 2) E. Three States
查看>>
IP工具类-自己动手做个ip解析器
查看>>
android之intent显式,显式学习
查看>>
Elaticsearch REST API常用技巧
查看>>
[Java] 数据库连接管理类
查看>>
Nginx 配置详解
查看>>
原生js版ajax请求
查看>>
python---小技巧
查看>>
被误解的 MVC 和被神化的 MVVM
查看>>
解决vsftpd日志时间问题
查看>>
adb install INSTALL_FAILED_ALREADY_EXISTS
查看>>
数数苹果手机中的不科学
查看>>
Ipsec transport mode and turnnel mode
查看>>