Js继承 小结
标签:
JavaScript
继承
一、类式继承
二、原型链继承
三、组合继承
类式继承
实现:在子类函数内部,使用call()、apply()、bind()改变父类内部this指向,指向子类创建的实例。
例子:
//父类function People(name, age) { this.name = name; this.age = age; }//原型方式设置共有属性People.prototype.eyes = "眼睛";//子类function Teacher(name, age) { People.call(this, name, age);//方法一: call() People.apply(this, [name, age]);//方法二: apply() var fuc = People.bind(this, name, age);//方法三: bind() fuc() // 1. call和apply区别在于apply的第二个参数必须是数组类型, // 所有传的参数必须存放在数组中。// call的可以是任意类型, 但是参数需要单独传递。// 2. bind的参数和call的一致, 但call和apply都是立即执行, bind是返回一个函数,// 需要调用函数后执行。}var tea = new Teacher("老陈", 26) //{name:"老王",age:26}console.log(tea);//{}console.log(Teacher.prototype)
缺点:不是真正的继承,子类不能拥有父类原型的属性。 子类原型没有继承父类的属性,不能实现复用。
优点:可以向父类传递参数
原型式继承
实现:将父类的实例赋值给子类的原型。
例子:
//父类function People() { this.name = "张三"} People.country = "中国";//子类function Teacher() {} Teacher.prototype = new People();var tea = new Teacher();console.log(tea); //{name:"张三",country:"中国"}console.log(Teacher.prototype); //{country:"中国"}
缺点:不能在创建子类实例时向父类传参
优点:子类的原型能够拥有父类原型以及实例的属性,可以复用
组合式继承
实现:将父类的实例赋值给子类的原型。
例子:
//父类function People(name, age) { this.name = name; this.age = age; } People.country = "中国";//子类function Teacher(name, age) { People.call(this, name, age); } Teacher.prototype = new People();var tea = new Teacher("老王", 24);console.log(tea); //{country:"中国",name:"老王",age:24}console.log(Teacher.prototype); //{country:"中国"}
优点:既能向父类传参,又能继承父类原型的属性,实现真正意义上的继承,可复用。
作者:一号男嘉宾_
链接:https://www.jianshu.com/p/0bfae19e4282
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦