关于阮一峰js继承文章阅读笔记

一、js继承分类

  1、构造函数继承(call/apply)

  2、prototype原型链继承

  3、非构造函数继承

二、构造函数继承(call和apply的区别在于,传入参数的形式不同)

  1、代码实例

//构造函数的继承
function Parent(name){
    this.name = name;
    this.action = function(){
        console.log(this.name)
    }
}
function Child(name){
    Parent.call(this,name)
}
var obj = new Child("tom")
obj.action()

  2、优点

  (1)避免引用类型数据共享

  (2)创建子类的时候可以向父类传参

  3、缺点

  (1)方法都在构造函数中定义,每次创建实例都会创建一遍方法。

三、prototype原型链继承(1、子类的原型 = 父类的实例2、子类的原型 = 父类的原型)

  1、代码示例

//原型链继承之子类原型 = 父类实例
function Parent(name){
    this.name = name
    this.action = function(){
        console.log(this.name)
    }
}
Parent.prototype.say =function(){
    console.log("hello")
}
function Child(name){
}
Child.prototype = new Parent("jiangqi")
var obj = new Child()
obj.action()
//原型链继承之子类原型 = 父类原型
function Parent(name,say){
    this.name = name
    this.say = function(){
        console.log("hello")
    } 
}
Parent.prototype.see = function(){
    console.log("see")
}
function Child(){

}
Child.prototype = Parent.prototype
Child.prototype.constructor = Child;
var obj = new Child("jiangqi")
obj.see()

第一种可以继承父类构造函数的各个属性和方法,但要new一个子类实例;第二种不用执行和建立父类的实例,节省空间;缺点是 Cat.prototype和Animal.prototype现在指向了同一个对象,那么任何对子类prototype的修改,都会反映到父类的prototype。

附上链接:http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance.html

    

  

原文地址:https://www.cnblogs.com/helloNico/p/11153022.html