javascript 原型,有何特点,原型链是如何形成的?实现继承的几种方法,优缺点

原型链是如何形成的?

每个子类的实例对象都包含一个内部属性 _proto_ 属性,该属性包含一个指针,指向父类的prototype,即原型对象。若父类的原型对象的 _proto_ 属性再指向上层函数,即爷爷类的prototype,层层往上,就成了原型链。

JS 中每一个函数都存在原型对象属性 prototype,并且只有函数才有原型对象 prototype 属性
所有函数的默认原型都是Object 的实例

实现继承的几种方法,优缺点?

一、原型链继承法

子类的 prototype 属性指向父类实例

代码示例
 function Parent(){
   this.name = ['小黑','小白'];
 }

 Parent.prototype.getName = function(){
   console.log(this.name);
 }

 function Child(){

 }

 Child.prototype = new Parent(); //关键代码
缺点
  1. 父类引用类型的属性,会被所有实例共享,例如:
var myChild = new Child();
var herChild = new Child();
myChild.name.push('小黄');
console.log(myChild.name); //  ['小黑','小白','小黄'];
console.log(herChild.name); //  ['小黑','小白','小黄'];
  1. 创建子类实例时,不能像父类传参

二、借用构造函数继承法(经典继承)

在子类构造函数内通过call、apply,执行父类构造函数

代码示例
function Parent(){
  this.name = ["小黑","小白"];
}
function Child(){
  Parent.call(this);
}

var myChild = new Child();
var herChild - new Child();

myChild.name.push("小黄");

console.log(myChild.name); //  ["小黑","小白","小黄"]
console.log(myChild.name); //   ["小黑","小白"]
优点
  1. 避免引用类型的属性被所有实例共享
  2. 可以在子类实例化的时候,向父类传递参数,例如:
function Parent(name){
  this.name =name;
}
function Child(name){
  Parent.call(this,name);
}

var myChild = new Child('小黑');
var herChild = new Child('小白');

console.log(myChild.name); // 小黑
console.log(herChild.name); //小白

三、组合继承法

运用原型链继承和经典继承(借用构造函数继承法)
优点:融合原型链继承和借用构造函数继承的优点,是javascript中最常用的继承方式

代码示例
function Parent (name){
  this.name = name;
}

Parent.prototype.getName = function(){
  console.log(name)
}

function Child(){
  Parent.call(this,name);
  this.age = 20;
}

Child.prototype = new Parent();
Child.prototype.constructor = Child;//构造函数指向自身

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 8,008评论 2 9
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,874评论 1 32
  • 今天学习《启问道通书》。道通:周道通,江苏宜兴人,曾从学于王守仁。
    真zhen阅读 2,900评论 0 0
  • 翔子中学毕业后,一直在外打工,生活不稳定。后来去省城,本想投靠姐姐,无奈姐姐的日子也不好过,头脑灵活的他东拼西凑的...
    雨晴天空阅读 3,468评论 0 3
  • #九月装满了海水 一半温热 一半凝白/ 十月入梦三国 穿身而往/ 十一月无你处 无江湖/ 十二月尚未到来 我已看见...
    大鱼霹雳阅读 1,522评论 0 0

友情链接更多精彩内容