javascript是如何实现继承的,javascript实现继承的方式有什么

  javascript是如何实现继承的,javascript实现继承的方式有什么

  本教程运行环境:windows7系统,javascript1.8.5版本1.8.5,戴尔G3电脑。

  

1、原型链继承

  这个继承是最简单的。它的实现原理是每个AO对象都有一个原型,这个原型返回对象类型的原型的引用。所以可以给它赋一个对象,就可以实现简单的原型链继承。

  函数Animal(){ this.eat=function(){

  alert(‘我要吃’);

  }

  } function Bird(){ this . fly=function(){

  alert(‘我会飞’);

  }

  }

  //将Bird类的原型设置为动物对象。

  Bird.prototype=新动物();var鸽子=新鸟();

  pigeon . fly();

  pigeon . eat();

  因此,鸟类继承了动物能吃的特性。打印console.info(鸽子),我们可以看到:

  当前对象的__proto__属性是一个动物对象,eat方法在这个动物对象中,也就是它的父类。如果在当前对象中找不到属性或方法,将根据原型链一步一步找到。

  这里Bird的父类是Animal,Animal的父类是Object,或者所有没有直接指定原型的对象都是Object。因为toString()方法在Object中,所以所有对象都可以调用它。对象的父类为空。

  另外需要注意的是,在原型链继承中,所有子类的父类对象都是相同的。只要任何子类改变了父类对象的属性,所有对象都会受到影响。这可能是缺点,也可能是优点。

  注意:原型和_ _原型_ _的区别可以在我的另一个博客http://www.cnblogs.com/shamoyuu/p/prototype.html.中找到

  

2、原型冒充继承

  原型模拟的原理是:取父类的构造函数,再执行一次。看看下面的代码:

  函数Animal(){ this.eat=function(){

  alert(‘我要吃’);

  }

  }函数Bird(){ Animal.apply(this,arguments);this.fly=function(){

  alert(‘我会飞’);

  }

  }var鸽子=新鸟();

  pigeon . fly();

  pigeon . eat();

  效果同上,只是这次eat方法不再是在原型链上,而是在鸽子对象上。

  

3、复制继承

  复制继承的原理是复制父类的所有属性和方法。看看下面的代码。

  函数Animal(){ this.eat=function(){

  alert(‘我要吃’);

  }

  } function Bird(){ this . fly=function(){

  alert(‘我会飞’);

  }//在这里写一个继承的方法,复制所有父类的属性或方法。

  this . extend=function(parent){ for(parent中的var key){ this[key]=parent[key];

  }

  }

  }var鸽子=新鸟();//执行继承的方法pigeon . extend(new Animal());

  pigeon . fly();

  pigeon . eat();

  这个和上面的一样。

  

4、ES6标准类的继承

   ES6引入了类的概念。新类可以帮助我们编写更好、更直观的面向对象代码。

  下面是ES6中类的继承,效果同上。

  动物类{

  构造函数(名称){ this.name=nameThis.type= animal

  }

  说(说){

  console . info(this . type [ this . name ] say say );

  }

  }

  Let dog=新动物(‘狗’);

  狗说(‘汪汪汪’);

  类鸟延伸动物{

  构造者(姓名){

  超级(名);This.type= bird

  }

  }

  让鸽子=新鸟(‘鸽子’);

  鸽子说(“我是一只鸟”);

  实现非常简单直观,不再称之为“模拟继承”。

  扩展资料

  原型链继承利弊

  1.只有单一继承。2.继承将影响所有对象。3.速度稍微慢一点。

  原型冒充继承利弊

  1.虽然可以继承更多,但是不能在运行时动态继承。您只能修改父类的构造函数。

  复制继承(非ES6推荐)

  因为很好的避免了以上两个缺点,所以可以实现多重继承,继承只影响当前对象,而且速度快,不需要修改父类的构造函数等。所以是最推荐的继承方式。

  注意:jQuery的继承也是通过复制继承来实现的,只是jQuery增加了很多验证判断,但原理是一样的。

  ES6标准类的继承

  如果能使用ES6的最新特性,这种继承是最好的,容易理解,是标准面向对象语言继承的应有方式。

  但是请注意:

  在构造器子类中,“this”必须放在super()调用之后。

  必须在子类的构造函数中调用Super(),或者必须显式返回一个对象

  无法继承更多。

  - Java在继承时会自动生成一个父类对象,但在js中不会。

  【推荐学习:javascript高级教程】以上是JavaScript如何继承的细节。请多关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: