欢迎访问 生活随笔!

尊龙游戏旗舰厅官网

当前位置: 尊龙游戏旗舰厅官网 > 前端技术 > javascript >内容正文

javascript

浅谈javascript继承【读javascript设计模式第四章节继承有感】 -尊龙游戏旗舰厅官网

发布时间:2024/1/17 javascript 33 豆豆
尊龙游戏旗舰厅官网 收集整理的这篇文章主要介绍了 浅谈javascript继承【读javascript设计模式第四章节继承有感】 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

javascript继承,无任是类式继承,原型式继承还是渗元式继承都是通过不同方法去围绕着prototype转,简单分析下三种不同继承方法是如何围绕prototype转的

一:类似继承,先上关键代码

function extend(subclass,supclass){
  var fn = function(){};
  fn.prototype = supclass.prototype;
  subclass.prototype = new fn();
  subclass.prototype.constructor = subclass;
  subclass.supclass = supclass;           
  if(supclass.prototype.constructor == object){
    supclass.prototype.constructor = supclass;
  } 

}

首先通过代码可以看出这个是类与类的继承,通过把子类的prototype设置成new一个空的构造函数,改空的构造函数的prototype是父级类的prototype,好处是类与类之间的结构比较明确,

使用参考代码:

 

function formfield(){
  this.init.apply(this,arguments)
}
formfield.prototype = {
  init:function(){
    console.log("init");
    this.bind();
  },
  bind:function(){
    console.log("bind");
  }
};

function formarea(){
  this.constructor.supclass.call(this);

};

extend(formarea,formfield);
var formarea = new formarea();

 

二:原型式继承,先上关键代码

function clone(obj){
  var fn = function(){};
  fn.prototype = obj;
  return new fn();

}

该方式优点是节约内存,无需上面那些类的各种指向,当前方式的有点恰巧也是他的缺点,改方式会共享他们的指针,特别是当指向的是一个对象或者数组的时候,得小心,clone出来的同事要重新复制替换掉之前的指向,另外同类式继承最大的区别,是类式继承是通过prototype = new xxx(某个父类),而原型是直接把prototype设置成一个字面量对象,

使用参考代码:

var formfield = {

  init:function(){

  }

}

var formarea = clone(formfield);

formarea.init();

 

三:渗元式,先上关键代码

function augment(receveclass,giveclass){
  if(arguments.length == 2){
    for(var i in giveclass.prototype){
      if(!receveclass.prototype[i]){
        receveclass.prototype[i] = giveclass.prototype[i]
        }
    }
  }else{
    var args = [].slice.call(arguments,2);
    for(var j=0, len=args.length; j    if(!receveclass.prototype[args[j]]){
      receveclass.prototype[args[j]] = giveclass.prototype[args[j]];
      }
    }
  }
}

由于javascript是不能实现继承多个父类的,因为它就一个prototype,所以可以通过上面的方法去扩展prototype的方式去模拟继承多个父类的效果,

使用参考代码:

function minx(){}
  minx.prototype = {
  sayname:function(){
    p("sayname")
  },
  sayage:function(){
    p(29);
  }
}       
function person(){};
augment(person,minx,"sayname");
var p1 = new person();
p1.sayname();

 

总结:

适应场合:方式一适合构造过程中需要传值去区分不同对象的情况,方式二适合带有很多默认属性,而大部分默认属性又都相同场合,且比较节约内存,方式三适合多个差异度很大的累,但是这些类里的某个方式又一样的场合下

 

 

 

 

 

 

转载于:https://www.cnblogs.com/samkr/p/3785199.html

总结

以上是尊龙游戏旗舰厅官网为你收集整理的浅谈javascript继承【读javascript设计模式第四章节继承有感】的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得尊龙游戏旗舰厅官网网站内容还不错,欢迎将尊龙游戏旗舰厅官网推荐给好友。

  • 上一篇:
  • 下一篇:
网站地图