js的各种继承

转载: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了之后我们的对象就可以调用原型方法。

时间: 2024-10-10 02:05:01

js的各种继承的相关文章

js对象的继承

<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>无标题文档</title> <script> //继承 : 子类不影响父类,子类可以继承父类的一些功能 ( 代码复用 ) //属性的继承 : 调用父类的构造函数 call //

JS 对象之继承

<!-- ————————JS对象之继承 ———————— --> //父类 function Sup(name){ this.name=name; } //父类的原型 Sup.prototype={ constructor:Sup, sayName:function(){ alert(this.name); } }; //子类构造函数 function Sub(age){ this.age=age; } //让子类的原型等于父类的实例 Sub.prototype=new Sup("

js最好的继承机制:用对象冒充继承构造函数的属性,用原型链继承 prototype 对象的方法。

js最好的继承机制:用对象冒充继承构造函数的属性,用原型prototype继承对象的方法. function ClassA(sColor) { this.color = sColor; } ClassA.prototype.sayColor = function () { alert(this.color); }; function ClassB(sColor, sName) {//在 ClassB 构造函数中,用对象冒充继承 ClassA 类的 sColor 属性 ClassA.call(th

js模拟实现继承功能

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> //js中模拟继承效果的案例 //函数对象中的三种“继承” 方式 汇总 //方式一 //****************************

JS创建对象、继承原型、ES6中class继承

面向对象编程:java中对象的两个基本概念:1.类:类是对象的模板,比如说Leader 这个是泛称领导,并不特指谁.2:实例:实例是根据类创建的对象,根据类Leader可以创建出很多实例:liyi,yingjiangyong等.每个实例表示具体的领导,他们 都属于Leader类型.ES6之前的版本中没有类和实例,是通过原型prototype完成面向对象编程.区别:JS中没有类和对象,所有的对象都是实例,只是把一个对象的原型指向另一个对象.//创建对象的第一种方法:.__proto__var Un

js 中的继承

面试的时候总是被问到js的继承,平时都是应用,最近有时间就把js 的继承整理了一下,和java 中的继承做了一下比较,代码如下: js继承有5种实现方式: 1.对象冒充 <script>   function Parent(username){      this.username = username;      this.hello = function(){        alert(this.username);      }    }    function Child(userna

js如何实现继承

js继承有5种实现方式:1.继承第一种方式:对象冒充  function Parent(username){    this.username = username;    this.hello = function(){      alert(this.username);    }  }  function Child(username,password){    //通过以下3行实现将Parent的属性和方法追加到Child中,从而实现继承    //第一步:this.method是作为一

JS面向对象之继承——原型链

原型对象 每个javascript对象都有一个原型对象,这个对象在不同的解释器下的实现不同.比如在firefox下,每个对象都有一个隐藏的__proto__属性,这个属性就是“原型对象”的引用. 原型链 由于原型对象本身也是对象,根据上边的定义,它也有自己的原型,而它自己的原型对象又可以有自己的原型,这样就组成了一条链,这个就是原型链,JavaScritp引擎在访问对象的属性时,如果在对象本身中没有找到,则会去原型链中查找,如果找到,直接返回值,如果整个链都遍历且没有找到属性,则返回undefi

第21篇 js四种继承方式

js是一个很自由的语言,没有强类型的语言的那种限制,实现一个功能往往有很多做法.继承就是其中的一个,在js中继承大概可以分为四大类,上面一篇文章也提及过一些,下面开始详细说说js的继承. 1.原型继承---最简单,最常用的 function funcA(){ this.show=function(){ console.log("hello"); } } function funcB(){ } funcB.prototype=new funcA(); var b=new funcB();

JS 面向对象之继承 -- 借用构造函数

转自 http://www.cnblogs.com/yangjinjin/archive/2013/02/01/2889519.html 上次讲到的原型链中,原型链存在一个问题就是不能向超类型的构造函数传递参数.那么这次就是要实现如何向超类型构造函数传递参数. 这种方法我们称之为借用构造函数(constructor stealing) 这里的实现方法是使用js的原生方法apply()或all().那么先温习下apply()和all()函数的知识. call方法: 语法:call([thisObj