zoukankan      html  css  js  c++  java
  • js几种继承模式(传统,call/apply,共享原型,圣杯模式)

    1传统模式——原型链
    
    Father.prototype.name="deng"
    
    function Father(){
    
    }
    
    var father=new Father()
    var son=new Father()
    
    father.name //deng
    
    son.name //deng

    过多的继承了没用的属性。
    2、借用构造函数 call、apply

    function Person(name,age){
    this.name=name;
    this.age=age;
    }
    var person=new Person('zhangsan',15);
    var obj1={}
    Person.call(obj1,'wangmazi',29)
    console.log(obj1)  //{name: "wangmazi", age: 29}

      不能继承借用的构造函数的原型

      多执行一个函数

       3.共享原型

      function Father(){}

       function Son(){}

       Father.prototype.lastName = 'deng';
       Son.prototype = Father.prototype;

       var son = new Son();

      son.lastName //'deng'

       不能随便改动自己的原型,因为指向同一个空间。

     4.圣杯模式    基于共享原型的基础上增加一个中间层

      

    function Father(){}
    function Son(){}
    Father.prototype.lastName = 'qin';

    var extend = (function(){
    var Mid = function(){}
    return function (Target, Origin){
    Mid.prototype = Origin.prototype;
    Target.prototype = new Mid();
    Target.prototype.constructor = Target
    }
    }())

    extend(Son, Father);
    var son = new Son();

     

    Son.prototype.firstName="333"   给Son的原型上添加属性不影响Father的原型

  • 相关阅读:
    最短路径算法
    XMLhelper
    关于NuDaqPci 数据采集
    批处理常用命令及用法大全
    c#智能感知(设置)及实现
    单片机串行通信全解析
    Esp8266
    使用NOOBS给树莓派安装系统Raspbian
    命令提示符编译java
    javaWeb使用POI操作Excel
  • 原文地址:https://www.cnblogs.com/h5it/p/12750107.html
Copyright © 2011-2022 走看看