`

JavaScript实现继承的几种方式

阅读更多

这篇文章中,介绍了原型链继承的情形,事实上,JavaScript虽没有给出继承的关键字,但是我们依然能够拿出一些好办法实现。

 

1、原型链继承:

			var Base = function()
			{
				this.level = 1;
				this.name = "base";
				this.toString = function(){
					return "base";
				};
			};
			Base.CONSTANT = "constant";
			
			var Sub = function()
			{
			};
			Sub.prototype = new Base();
			Sub.prototype.name = "sub";

 

优点:从instanceof关键字来看,实例既是父类的实例,又是子类的实例,看起来似乎是最纯粹的继承。

缺点:子类区别于父类的属性和方法,必须在Sub.prototype = new Base();这样的语句之后分别执行,无法被包装到Sub这个构造器里面去。例如:Sub.prototype.name = "sub";无法实现多重继承。

 

 

2、构造继承:

			var Base = function()
			{
				this.level = 1;
				this.name = "base";
				this.toString = function(){
					return "base";
				};
			};
			Base.CONSTANT = "constant";
			
			var Sub = function()
			{
				Base.call(this);
				this.name = "sub";
			};

优点:可以实现多重继承,可以把子类特有的属性设置放在构造器内部。

缺点:使用instanceof发现,对象不是父类的实例。

 

 

3、实例继承:

			var Base = function()
			{
				this.level = 1;
				this.name = "base";
				this.toString = function(){
					return "base";
				};
			};
			Base.CONSTANT = "constant";
			
			var Sub = function()
			{
				var instance = new Base();
				instance.name = "sub";
				return instance;
			};

优点:是父类的对象,并且使用new构造对象和不使用new构造对象,都可以获得相同的效果。

缺点:生成的对象实质仅仅是父类的实例,并非子类的对象;不支持多继承。

 

 

4、拷贝继承:

			var Base = function()
			{
				this.level = 1;
				this.name = "base";
				this.toString = function(){
					return "base";
				};
			};
			Base.CONSTANT = "constant";
			
			var Sub = function()
			{
				var base = new Base();
				for(var i in base)
					Sub.prototype[i] = base[i];
				Sub.prototype["name"] = "sub";
			};

优点:支持多继承。

缺点:效率较低;无法获取父类不可枚举的方法。

 

 

这几种形式各有特点,仅就我提供的代码而言,满足下面的表格:

 

instanceof父类 instanceof子类 子类constructor 不可枚举方法的继承 多继承可实现
原型链继承 TRUE TRUE FALSE TRUE FALSE
构造继承 FALSE TRUE TRUE TRUE TRUE
实例继承 TRUE FALSE FALSE TRUE FALSE
拷贝继承 FALSE TRUE TRUE FALSE TRUE

 

---------------------------------------------------------------------------------------------------------------------------

 

2012-1-10:补充,如果我们不需要类继承,只需要对象继承,对于支持 ECMAScript 5 的浏览器来说,还可以用Object.create方法来实现:

			var Base = function()
			{
				this.level = 1;
				this.name = "base";
				this.toString = function(){
					return "base";
				};
			};
			Base.CONSTANT = "constant";
			
			var sub = Object.create(new Base());
			sub.name = "sub";

 

文章系本人原创,转载请注明出处和作者

5
0
分享到:
评论
1 楼 lzzy_alex 2012-03-08  
Base.call(this); 多么优雅的写法啊!

相关推荐

    【JavaScript的9种继承实现方式归纳】js实现继承的几种方式.pdf

    JavaScript 的 9 种继承实现方式归纳 JavaScript 中的继承方式是基于原型的,与基于类的编程语言,如 C++ 和 Java,截然不同。JavaScript 的灵活性使得其实现继承的方式非常多样化。本文将介绍 JavaScript 中的 9 ...

    Javascript中的几种继承方式对比分析_.docx

    Javascript中的几种继承方式对比分析_.docx

    详述JavaScript实现继承的几种方式(推荐)

    在JavaScript中,实现继承的几种方式可以带来不同的好处和权衡,主要包括原型链继承、构造函数继承、组合继承以及原型式继承等。 首先,原型链继承是基于原型对象的属性共享机制。每个对象都有一个指向其原型对象的...

    JavaScript是如何实现继承的(六种方式)_.docx

    在JavaScript中,由于其动态性质,继承的实现方式与传统的面向对象语言有所不同。本文将详细介绍JavaScript中的六种继承方式,包括它们的工作原理以及实际应用示例。 #### 二、原型链继承 **1. 原理概述** 原型链...

    浅谈Javascript实现继承的方法

    下面,我们将探讨在Javascript中实现继承的几种主要方法,并对每种方法进行详细的解释。 1. 原型链继承 原型链继承是Javascript中最基本的继承方式。它利用了原型对象的特性,即所有对象实例共享同一个原型对象上的...

    【JavaScript源代码】JavaScript中的几种继承方法示例.docx

    **原理**: 在JavaScript中,原型链继承是一种实现继承的方式,它通过让子类的原型对象指向父类的一个实例来实现属性和方法的共享。 - **核心概念**: 每个函数都具有一个`prototype`属性,该属性默认是一个空的对象...

    JavaScript继承机制探讨及其应用.pdf

    本文通过分析JavaScript的继承机制,提供了几种继承的实现方式,并分析了各自的优缺点和使用场景。同时,通过分析John Resig开发的知名开源框架中的核心源代码,展示了继承机制在JavaScript框架级项目开发中的应用。...

    JavaScript定义类的几种方式总结

    JavaScript定义类的几种方式包括工厂方式、构造函数和原型方式,每种方法都有其特点和适用场景,接下来我们将详细探讨。 工厂方式是最早期的面向对象编程在JavaScript中的实践之一。使用工厂方式定义类,本质上就是...

    javascript的几种继承方法介绍_.docx

    在JavaScript中,对象可以通过原型链实现继承,这是JavaScript中实现面向对象编程的重要方式。本文将详细介绍JavaScript中的三种主要继承方法:原型链继承、构造函数继承以及组合继承。 1. **原型链继承**: - ...

    javascript继承之工具函数二

    这里提到的"工具函数二"可能是介绍了一种或多种继承模式的实现方式。下面我们将详细讨论这些概念: 1. **原型链继承**:这是JavaScript默认的继承方式,通过`__proto__`或`Object.create()`来实现。子对象的原型被...

    Javascript编程中几种继承方式比较分析

    随后,文章介绍了几种主流的继承方式: 1. 原型链继承是JavaScript中最基本的继承方式。它涉及到一个子类型的原型被设置为一个父类型实例的操作。通过这种方式,子类型可以继承父类型的属性和方法。但是,原型链...

    在JavaScript中实现类的方式探讨

    在JavaScript中实现类的方式主要有几种,包括对象字面量(Object Literal)、构造函数(Constructor)、原型链(Prototype Chain)以及ES6引入的类语法。每种方式都有其适用的场景和特点,理解它们有助于我们更好地...

    再谈javascript原型继承

    Javascript原型继承是一个被说烂掉了的话题,但是自己对于这个问题一直没有彻底理解,今天花了点时间又看了一遍《Javascript模式》中关于原型实现继承的几种方法,下面来一一说明下,在最后我根据自己的理解提出了一...

    【JavaScript源代码】JavaScript继承的三种方法实例.docx

    ### JavaScript继承的三种方法实例详解 #### 一、概述 在JavaScript中,虽然原生语言层面没有提供传统意义上的“类”这一概念,但它...理解并掌握这几种继承方式对于编写高质量、可维护的JavaScript代码至关重要。

    Javascript中的几种继承方式对比分析

    在JavaScript中,有多种实现继承的方式,每种都有其优缺点,适用于不同的场景。 首先,我们来看**原型链继承**。这种方式是通过将父类的实例赋值给子类的原型来实现的。例如: ```javascript function Person(name...

    javascript 继承实现方法

    以下就是几种在JavaScript中实现继承的方式。 对象冒充(Pseudoclassical Inheritance): 对象冒充是利用构造函数和函数的call方法来实现的。构造函数使用this关键字定义属性和方法,而call方法则可以调用指定对象...

    JS实现继承的几种常用方式示例

    在JavaScript中,有多种实现继承的方式,主要包括原型链继承、构造继承、组合继承以及寄生组合继承。下面将详细阐述这四种方式。 1. **原型链继承** 原型链继承是JavaScript最基础的继承方式,它利用了原型对象的...

    史上最为详细的javascript继承(推荐)

    本文将深入探讨JavaScript中的几种继承方式,包括它们的基本原理、优缺点以及适用场景。 首先,原型链继承是JavaScript中最早实现继承的方式。它基于原型链机制,即每个对象都有一个`__proto__`属性,指向创建该...

    JavaScript 继承的实现

    JavaScript继承的实现方式多样,除了原型链之外,还有如下几种常见方式: 1. **构造函数继承**:通过调用父构造函数来初始化子对象,但不能避免方法重复。 2. **原型链继承**:通过修改子构造函数的原型使其指向父...

Global site tag (gtag.js) - Google Analytics