(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的简称。^-^
以上实现了继承,多态,重载,和完整的构造体方法链。
分享到:
相关推荐
在本文中,我们将深入探讨JavaScript继承机制的实现方式,并对基于原型的继承、构造函数方式继承、组合继承、寄生式继承等继承机制进行了总结归纳和分析。 基于原型的继承 JavaScript是一门基于原型的语言,它不像...
JavaScript继承机制探讨及其应用 JavaScript是一门弱类型语言,具有函数式编程和面向对象编程的特点。随着近几年JavaScript生态圈的发展和成熟,项目的编码量和复杂度也在呈几何级数增长。JavaScript面向对象编程中...
本文将深入探讨JavaScript继承的实现方式,以及其中的问题和解决方案。 首先,我们来看混合方式的实现,这种方式结合了原型链和对象冒充。在JavaScript中,构造函数是用于创建特定类型对象的函数。例如,`Employee`...
组合继承结合了构造函数和原型链继承,子类先调用父类构造函数来初始化属性,再通过原型链继承父类的方法。这种方式解决了前两者的问题,但存在性能损耗,因为父类构造函数会被调用两次。 5. 原型委托继承...
在JavaScript中,面向对象编程是实现复杂功能和代码复用的关键。继承是面向对象的核心特性之一,它允许一个对象(子类)从另一个对象(父类)获取...了解这些基础概念有助于我们更好地理解和使用JavaScript的继承机制。
JavaScript中的继承是一个核心概念,它在面向对象编程中...总之,JavaScript的继承机制是其灵活性和强大功能的一部分,但同时也带来了复杂性。理解和掌握这些继承模式对于编写高效、可维护的JavaScript代码至关重要。
JavaScript中的继承机制是其面向对象编程的一个核心特性。在JavaScript中,有多种实现继承的方式,如原型链、构造函数、组合继承(构造函数+原型链混合方式)等。本文主要探讨的是构造函数与原型链的混合使用,以...
JavaScript的原型继承是一种非常灵活的继承机制,它允许对象直接继承另一个对象的属性和方法。 ##### **3.1 原型继承的实现** 实现原型继承的基本思路是让一个对象的`__proto__`属性指向另一个对象。例如: ```...
Java 中的继承(子类调用父类构造方法还不懂) Java 中的继承是指一个类可以继承另一个类的属性和方法,这样可以实现代码的复用和提高开发效率。在 Java 中,继承使用关键字 `extends` 来实现。 Java 中继承的注意...
### JavaScript继承的三种方法实例详解 #### 一、概述 在JavaScript中,虽然原生语言层面没有提供传统意义上的“类”这一概念,但它通过构造函数和原型链等机制实现了类的功能,尤其是继承这一核心概念。继承是...
JavaScript中的继承是面向对象编程的重要概念,它允许一个对象(子对象)获取另一个对象(父对象)的属性和方法,从而实现代码复用和...同时,理解JavaScript的原型、原型链和闭包等基础概念对于掌握继承机制至关重要。
在 JavaScript 中,继承主要通过原型链(prototype chain)、构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承等方法实现。以下是对这些继承方式的详细解释: 1. **原型链继承**:这是 JavaScript ...
通过理解JavaScript的原型链、构造函数、`new`操作符以及如何利用这些特性实现继承,开发者能够更好地设计和实现面向对象的JavaScript应用程序。在实践中,根据项目需求选择合适的继承模式,如原型链继承、构造函数...
通过分析和实践`source.js`中的代码,我们可以更好地理解JavaScript的继承机制,掌握如何灵活地构建可扩展的对象模型。这不仅有助于提升我们的编程能力,也是面试中经常被问到的问题,因此深入学习和掌握这部分内容...
JavaScript的继承机制主要基于原型链,本文将深入探讨JavaScript的继承与多继承,并通过实例进行分析。 1. **JavaScript继承** - **原理**:JavaScript的继承主要是通过原型链(prototype chain)来实现的。每个...
这些框架通过扩展JavaScript的继承机制,提供了更强大的类系统和方法调用链,使得开发大型复杂应用变得更加容易。 总结一下,JavaScript的类继承是通过构造函数、原型链和实例化来实现的。`this.callParent`方法...
JavaScript中的对象继承是基于原型和原型链的...在实际开发中,为了更好地管理和优化代码,还可以使用类(class)语法(ES6引入),它提供了更接近传统面向对象语言的语法糖,但底层仍然是基于原型和原型链的继承机制。
原型对象是JavaScript继承机制的核心。 寄生组合模式 基于原型的继承有一个缺陷,那就是它不能够很好地支持多继承。如果我们想要实现多继承,我们可以使用寄生组合模式。寄生组合模式是通过组合原型对象和构造函数...