zoukankan      html  css  js  c++  java
  • 关于阮一峰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

        

      

  • 相关阅读:
    Android内存分析和调优(中)
    Android内存分析和调优(上)
    背包九讲之四:混合背包问题:01,完全,多重的混合
    背包九讲之三:多重背包问题:一个物品允许选有限次
    背包九讲之二:完全背包问题:一个物品允许选多次
    背包九讲之一:01背包问题:一个物品只允许选一次
    动态规划:最长递增子序列
    动态规划:采油区域
    Hankson的趣味题
    动态规划:传纸条
  • 原文地址:https://www.cnblogs.com/helloNico/p/11153022.html
Copyright © 2011-2022 走看看