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

        

      

  • 相关阅读:
    Failed to connect to remote VM
    在hibernate中实现oracle的主键自增策略
    Eclipse快捷键大全(转载)
    hibernate 中 get、load 的 区别
    Spring2.5的新特性:第一部分
    返回上一页代码实现
    Java与Json的使用方法介绍
    也悼念那个伟大的公司
    MFC/C++检查文件是否存在
    新一代开源VoIP协议栈--OPAL(OpenH323 v2)
  • 原文地址:https://www.cnblogs.com/helloNico/p/11153022.html
Copyright © 2011-2022 走看看