码迷,mamicode.com
首页 > Web开发 > 详细

js的各种继承

时间:2016-04-29 14:35:57      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

转载:https://segmentfault.com/a/1190000002440502

还有一个里边有js的采用临时方法的继承 http://javapolo.iteye.com/blog/1996871

 

我们用 类式继承继承 无参的构造函数 原型链继承,缺点(如果字面量重写原型中断关系,2,子类无法给超类传参)

借用构造函数,有参的构造函数。(可以传参,没有prototype不能说继承)

原型链+借用构造函数的模式,这种模式称为组合继承,有参的构造函数。

组合式继承是比较常用的一种继承方法,其背后的思路是 使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承。这样,既通过在原型上定义方法实现了函数复用,又保证每个实例都有它自己的属性。 原型方法比对象方法和类型方法的高级就是复用。

原型式继承 原型式继承首先在obj()函数内部创建一个临时性的构造函数 ,然后将传入的对象作为这个构造函数的原型,最后返回这个临时类型的一个新实例。 缺点:不同的对象基本类型会重置,但是类似于数组就会保留。 寄生式继承 这种继承方式是把原型式+工厂模式结合起来,目的是为了封装创建的过程。 组合式继承的小问题 组合式继承是js最常用的继承模式,但组合继承的超类型在使用过程中会被调用两次;一次是创建子类型的时候,另一次是在子类型构造函数的内部。

 

 

       var baseClass = function(){
	   	  this.name=‘yanjinyun‘;
	   	  this.age = 11;
	   	  this.arr=[‘a‘,‘b‘,‘c‘];
	   	  this.run=function(){
	   	  	
	   	  	alert(this.age);
	   	  }
	   	  this.add=function(){
	   	  	this.age++;
	   	  }
	   	  this.arrPush=function(){
	   	  	this.arr.push(‘d‘);
	   	  }


	   }
	  /* var b1=new baseClass();
	   b1.run();
	   var b2=new baseClass();
	   b2.run();
	   */
	   var sonClass=function(){

	   }
	   sonClass.prototype=new baseClass();
	   s1=new sonClass();
	   s1.add();
	   s1.arrPush();
	   s1.run();//12
	   alert(s1.arr);//abcd
	   s2=new sonClass();
	   s2.run();//11
       alert(s1.arr);//abcd  在没有push的情况下出来的是abcd

一些问题:

为什么对象可以调用原型方法,js中的new 到底做了一件什么样的事情,类.prototype的本质就是一个对象,为什么new了之后我们的对象就可以调用原型方法。

js的各种继承

标签:

原文地址:http://www.cnblogs.com/coding4/p/5446028.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!