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的原型

  • 相关阅读:
    Javascript 之 存储
    Javascript 之 跨域
    Javascript 之 Ajax
    Javascript 之 事件
    流程控制语句
    JS属性操作
    JS效果的步骤
    遍历Map的四种方法
    自动删除ftp自动保存的密码
    IE6下png格式透明图片显示灰色的解决办法.
  • 原文地址:https://www.cnblogs.com/h5it/p/12750107.html
Copyright © 2011-2022 走看看