`
rainsilence
  • 浏览: 160559 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Javascript 继承机制和构造方法链实现(原)

阅读更多
(function(){
	Rs = {version: 1.0};
	
	Rs.extend = function(target, params) {
		
		target = target || {};
		
		for (var prop in params) {
			target[prop] = params[prop];
		}	
		return target;
	};
	
	Rs.Class = function() {
		// 构造体
		var Class = function() {
			this.initialize.apply(this, arguments);
		};
		
		var extended = {};
		
		var parent, superclass;
		
		for (var index = 0, len = arguments.length; index < len; index++) {
			
			if (typeof arguments[index] == "function") {
				
				// 如果有父类
				if (index == 0 && len > 1) {
					
					var initialize = arguments[index].prototype.initialize;
					
					arguments[index].prototype.initialize = function() {};
					
					extended = new arguments[index]();
					
					if (initialize === undefined) {
						delete arguments[index].prototype.initialize;
					} else {
						arguments[index].prototype.initialize = initialize;
					}
					
					superclass = arguments[index];
					continue;
				}
				
				parent = arguments[index].prototype;
			} else {
				// 如果为顶层基类
				parent = arguments[index];
			}
			
			Rs.extend(extended, parent);
		}
		Class.prototype = extended;
		Class.superclass = superclass;
		return Class;
	};
})();

var Animal = Rs.Class({
    initialize: function(name){
	
        this.name = name;  
    },
      
    showName: function(){    
        alert(this.name);    
    }  
});

var Cat = Rs.Class(Animal, {
    initialize: function(name) {
        // 调用父类构造函数  
        Cat.superclass.prototype.initialize.call(this, name);  
    }  
});  
  
var BlackCat = Rs.Class(Cat, {
    initialize: function(name, type) {  
                // 调用父类构造函数  
        BlackCat.superclass.prototype.initialize.call(this, name);  
        this.type = type;  
    },  
    showType: function() {  
        alert(this.type);  
    },  
    showName: function() {  
        alert(this.name + ":" + this.type);  
    }  
});  


var cat = new Cat("cat name");

// 继承方法  
cat.showName();  

// true  
alert(cat instanceof Animal);  
  
// true  
alert(cat instanceof Cat);  
  
// false  
alert(cat instanceof BlackCat);  
  
var blackCat = new BlackCat("123", "black");  
  
// 方法重写  
blackCat.showName();  
  
// 自有方法  
blackCat.showType();  
  
// true  
alert(blackCat instanceof Animal);  
  
// true  
alert(blackCat instanceof Cat);  
  
// true  
alert(blackCat instanceof BlackCat);


大家可能会问,Rs是什么,Rs就是Rainsilence的简称。^-^

以上实现了继承,多态,重载,和完整的构造体方法链。
7
2
分享到:
评论

相关推荐

    JavaScript继承机制研究.pdf

    在本文中,我们将深入探讨JavaScript继承机制的实现方式,并对基于原型的继承、构造函数方式继承、组合继承、寄生式继承等继承机制进行了总结归纳和分析。 基于原型的继承 JavaScript是一门基于原型的语言,它不像...

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

    JavaScript继承机制探讨及其应用 JavaScript是一门弱类型语言,具有函数式编程和面向对象编程的特点。随着近几年JavaScript生态圈的发展和成熟,项目的编码量和复杂度也在呈几何级数增长。JavaScript面向对象编程中...

    详解Javascript继承的实现

    本文将深入探讨JavaScript继承的实现方式,以及其中的问题和解决方案。 首先,我们来看混合方式的实现,这种方式结合了原型链和对象冒充。在JavaScript中,构造函数是用于创建特定类型对象的函数。例如,`Employee`...

    JavaScript学习之三 — JavaScript实现继承的7种方式

    组合继承结合了构造函数和原型链继承,子类先调用父类构造函数来初始化属性,再通过原型链继承父类的方法。这种方式解决了前两者的问题,但存在性能损耗,因为父类构造函数会被调用两次。 5. 原型委托继承...

    JavaScript实现继承的几种方式

    在JavaScript中,面向对象编程是实现复杂功能和代码复用的关键。继承是面向对象的核心特性之一,它允许一个对象(子类)从另一个对象(父类)获取...了解这些基础概念有助于我们更好地理解和使用JavaScript的继承机制。

    JavaScript继承

    JavaScript中的继承是一个核心概念,它在面向对象编程中...总之,JavaScript的继承机制是其灵活性和强大功能的一部分,但同时也带来了复杂性。理解和掌握这些继承模式对于编写高效、可维护的JavaScript代码至关重要。

    基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解

    JavaScript中的继承机制是其面向对象编程的一个核心特性。在JavaScript中,有多种实现继承的方式,如原型链、构造函数、组合继承(构造函数+原型链混合方式)等。本文主要探讨的是构造函数与原型链的混合使用,以...

    浅析javascript原型继承机制

    JavaScript的原型继承是一种非常灵活的继承机制,它允许对象直接继承另一个对象的属性和方法。 ##### **3.1 原型继承的实现** 实现原型继承的基本思路是让一个对象的`__proto__`属性指向另一个对象。例如: ```...

    java中的继承(子类调用父类构造方法还不懂).doc

    Java 中的继承(子类调用父类构造方法还不懂) Java 中的继承是指一个类可以继承另一个类的属性和方法,这样可以实现代码的复用和提高开发效率。在 Java 中,继承使用关键字 `extends` 来实现。 Java 中继承的注意...

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

    ### JavaScript继承的三种方法实例详解 #### 一、概述 在JavaScript中,虽然原生语言层面没有提供传统意义上的“类”这一概念,但它通过构造函数和原型链等机制实现了类的功能,尤其是继承这一核心概念。继承是...

    JavaScript继承详解.doc

    JavaScript中的继承是面向对象编程的重要概念,它允许一个对象(子对象)获取另一个对象(父对象)的属性和方法,从而实现代码复用和...同时,理解JavaScript的原型、原型链和闭包等基础概念对于掌握继承机制至关重要。

    java script 继承的实现

    在 JavaScript 中,继承主要通过原型链(prototype chain)、构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承等方法实现。以下是对这些继承方式的详细解释: 1. **原型链继承**:这是 JavaScript ...

    JavaScript继承的特性与实践应用深入详解

    通过理解JavaScript的原型链、构造函数、`new`操作符以及如何利用这些特性实现继承,开发者能够更好地设计和实现面向对象的JavaScript应用程序。在实践中,根据项目需求选择合适的继承模式,如原型链继承、构造函数...

    javascript继承之工具函数二

    通过分析和实践`source.js`中的代码,我们可以更好地理解JavaScript的继承机制,掌握如何灵活地构建可扩展的对象模型。这不仅有助于提升我们的编程能力,也是面试中经常被问到的问题,因此深入学习和掌握这部分内容...

    JavaScript继承与多继承实例分析.docx

    JavaScript的继承机制主要基于原型链,本文将深入探讨JavaScript的继承与多继承,并通过实例进行分析。 1. **JavaScript继承** - **原理**:JavaScript的继承主要是通过原型链(prototype chain)来实现的。每个...

    Javascript类的继承,使用this.callParent调用超类方法

    这些框架通过扩展JavaScript的继承机制,提供了更强大的类系统和方法调用链,使得开发大型复杂应用变得更加容易。 总结一下,JavaScript的类继承是通过构造函数、原型链和实例化来实现的。`this.callParent`方法...

    JavaScript使用原型和原型链实现对象继承的方法详解

    JavaScript中的对象继承是基于原型和原型链的...在实际开发中,为了更好地管理和优化代码,还可以使用类(class)语法(ES6引入),它提供了更接近传统面向对象语言的语法糖,但底层仍然是基于原型和原型链的继承机制。

    浅析JavaScript实现基于原型对象的“继承”.pdf

    原型对象是JavaScript继承机制的核心。 寄生组合模式 基于原型的继承有一个缺陷,那就是它不能够很好地支持多继承。如果我们想要实现多继承,我们可以使用寄生组合模式。寄生组合模式是通过组合原型对象和构造函数...

Global site tag (gtag.js) - Google Analytics