zoukankan      html  css  js  c++  java
  • JavaScript继承方式

    我的上一篇随笔中写了有关原型继承的,下面介绍几种更加有用的。

    借用构造函数

    在解决原型中关于引用类型值所带来的问题,开发人员开始使用一种叫做借用构造函数。

    基本思想:

    在子类型构造函数的内部调用超类型的构造函数,这种类型java里面的继承。
    函数只不过是特定执行环境中执行代码的对象,因此通过使用apply和call方法也可以在新创建的对象上执行构造函数。

    function SuperType(){
        this.colors = ["red","blue","green"];
    }
    
    function SubType(){
        //继承SuperType
        SuperType.call(this);//在新SubType对象上执行SuperType函数定义的所有对象初始化代码,所以SubType的每个实例就会有自己的colors属性的副本了
    }
    
    var instance1 = new SubType();
    instance1.colors.push("black");
    alert(instance1.colors);//"red","blue","green","black"
    
    var instance2 = new SubType();
    alert(instance2.colors);//"red","blue","green"
    

    借用构造函数的问题

    1.方法都在构造函数中定义,因此函数就无从复用了。
    2.在超类型的原型中定义的方法,对子类型而言也是不可见的。
    考虑到这些问题,借用构造函数的技术也是很少见的。

    组合继承

    将原型链和借用构造函数的技术组合在一起。其背后的思路是使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承。
    这样通过在原型上定义方法也实现了函数复用,又能保证每个实例都有自己的属性。

    function SuperType(name){
        this.name = name;
        this.colors = ["red","blue","green"];
    }
    
    SuperType.prototype.sayName = function(){
        alert(this.name);
    };
    
    function SubType(name,age){
        //使用借用构造函数
        SuperType.call(this,name);
        this.age = age;
    }   
    
    //继承方法(原型继承)
    SubType.prototype = new SuperType();
    SubType.prototype.constructor = SubType;
    SubType.prototype.sayAge = function(){
        alert(this.age);
    }
    

    Object.create()方法

    规范了原型式继承。这个方法接受一个用作新对象原型的对象和(可选的)一个为新对象定义额外属性的对象。

    寄生式继承

    寄生组合式继承

    最后两个继承不是很清楚,等之后看了视频理解更详细再来补充

  • 相关阅读:
    Nhibernate多表查询解决办法
    Nhibernate compositeid class must override Equals()解决办法
    SQLSERVER2005安装说明
    IList转化为Dataset C#
    Named SQL queries
    把object转换成DataSet,进行数据绑定
    使用Lucene检索文档中的关键字
    使用代理为业务操作添加安全检测
    mongodb副本集架构搭建
    Java生成中文验证码
  • 原文地址:https://www.cnblogs.com/sminocence/p/7985320.html
Copyright © 2011-2022 走看看