-
/* Simple JavaScript Inheritance
-
* By John Resig http://ejohn.org/
-
* MIT Licensed.
-
*/
-
// Inspired by base2 and Prototype
-
(function(){
-
var initializing = false, fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/;
-
-
// The base Class implementation (does nothing)
-
this.Class = function(){};
-
-
// Create a new Class that inherits from this class
-
Class.extend = function(prop) {
-
var _super = this.prototype;
-
-
// Instantiate a base class (but only create the instance,
-
// don't run the init constructor)
-
initializing = true;
-
var prototype = new this();
-
initializing = false;
-
-
// Copy the properties over onto the new prototype
-
for (var name in prop) {
-
// Check if we're overwriting an existing function
-
prototype[name] = typeof prop[name] == "function" &&
-
typeof _super[name] == "function" && fnTest.test(prop[name]) ?
-
(function(name, fn){
-
return function() {
-
var tmp = this._super;
-
-
// Add a new ._super() method that is the same method
-
// but on the super-class
-
this._super = _super[name];
-
-
// The method only need to be bound temporarily, so we
-
// remove it when we're done executing
-
var ret = fn.apply(this, arguments);
-
this._super = tmp;
-
-
return ret;
-
};
-
})(name, prop[name]) :
-
prop[name];
-
}
-
-
// The dummy class constructor
-
function Class() {
-
// All construction is actually done in the init method
-
if ( !initializing && this.init )
-
this.init.apply(this, arguments);
-
}
-
-
// Populate our constructed prototype object
-
Class.prototype = prototype;
-
-
// Enforce the constructor to be what we expect
-
Class.prototype.constructor = Class;
-
-
// And make this class extendable
-
Class.extend = arguments.callee;
-
-
return Class;
-
};
-
})();
相关推荐
本文将详细介绍如何在JavaScript中通过类似于继承的方式来实现多态。 #### 二、基本概念 在面向对象编程中,多态性允许子类对象被当作父类对象来使用,同时保持子类的特性。这主要通过重写父类的方法来实现。在...
浅析JavaScript实现基于原型对象的“继承” 本文旨在对JavaScript实现基于原型对象的“继承”进行深入分析,并与基于类的继承进行比较。通过对JavaScript的原型继承机制的介绍和实例分析,提出一个改进的“寄生组合...
JavaScript是一种动态类型的语言,它没有像Java或C++那样的传统类,而是使用函数作为构造器来模拟类的行为,并通过原型链实现继承。本文将深入探讨JavaScript中的类和继承,并结合`prototype.js`文件中的示例进行...
在前端模块化中,我们可以使用立即执行函数表达式(IIFE)或者ES6的模块系统(import/export)来实现类似的功能,将数据和功能封装在特定的作用域内,防止全局变量污染和其他模块的意外干扰。 **继承**:Java的继承...
JavaScript中的继承虽然基于原型,但通过各种技术手段仍然可以实现类似传统面向对象语言的功能。掌握JavaScript中的继承机制对于构建复杂的对象结构和提高代码复用性非常重要。随着ES6的普及,现代JavaScript提供了...
JavaScript是一种基于原型(Prototype)的面向对象编程语言,它的继承机制不同于传统的类继承,而是采用原型链(Prototype Chain)的方式实现。在这个模式下,对象可以继承其他对象的属性和方法,形成一种“类”的...
在JavaScript中,面向对象编程是其核心特性之一,而继承和派生则是实现面向对象的重要机制。本资料集合关注的是JavaScript中的继承派生以及与之相关的`apply`和`call`方法。 **继承**是面向对象编程的关键概念,...
在JavaScript中实现类继承的一种方法是通过构造函数和原型链。例如,`Parenizor`构造函数创建了一个具有`setValue`、`getValue`和`toString`方法的对象。`ZParenizor`是`Parenizor`的子类,通过`inherits`方法(类似...
虽然JavaScript不直接支持多重继承,但我们可以通过连续使用`call`方法来实现类似的效果。 **示例:** ```javascript function Class10() { this.showSub = function(a, b) { console.log(a - b); }; } ...
本文将深入探讨如何利用`prototype`实现JavaScript中的类似OOP继承的方法。 首先,我们需要理解`prototype`的概念。在JavaScript中,每个函数都有一个`prototype`属性,这个属性是一个对象,它包含了一个名为`...
多态的实现可以采用和继承类似的方法。首先定义一个抽象类,其中调用一些虚方法,虚方法在抽象类中没用定义,而是通过其具体的实现类来实现。 如下面的例子: Object.extend=function(destination,source){ for...
在阅读和理解上述内容时,需要注意的是,JavaScript的面向对象编程并不是传统意义上的类继承,而是通过函数和原型链来实现类似继承的行为。因此,在设计和实现继承时,需要对JavaScript的这种特性有深刻的理解,才能...
zInherit是一种常用的JavaScript继承实现方式,它通过修改对象的`__proto__`属性来实现继承。`__proto__`指向父对象的原型,从而使得子对象能够访问父对象的属性和方法。但是,`__proto__`并不是所有浏览器都支持的...
而`sun`通过类似的方式继承了`suber`和`father2`的属性和方法,实现了多重继承。 然而,需要注意的是,`call`方法不会继承父类的私有变量。在JavaScript中,由于闭包的作用,私有变量只存在于定义它们的函数作用域...
继承的方式有多种,而本文将详细探讨JavaScript实现继承的三种常用方式。 首先,我们来了解原型链继承。这是最传统也是最基本的继承方式,利用的是JavaScript基于原型的继承机制。在原型链继承中,子类型的原型对象...
JavaScript使用原型链实现继承,这意味着一个对象可以从另一个对象继承属性和方法。主要有两种继承方式: 1. 构造函数继承(经典继承):通过`new`关键字创建一个父类(超类)的新实例,然后将其作为子类的`...
JavaScript Mixin 是一种实现多继承的技术,它允许一个对象(或类)继承多个其他对象(或类)的特性。在JavaScript这种仅支持单一原型链继承的语言中,通过Mixin可以模拟多继承的效果。以下是对JavaScript Mixin实现...
总的来说,JavaScript的继承机制是通过构造函数和原型来实现的,它提供了一种灵活的方式来模拟面向对象的特性,使得开发者能够在JavaScript环境中实现类似于类和继承的功能。虽然这种方法与传统的面向对象语言有所...
在JavaScript中,实现继承的几种方式可以带来不同的好处和权衡,主要包括原型链继承、构造函数继承、组合继承以及原型式继承等。 首先,原型链继承是基于原型对象的属性共享机制。每个对象都有一个指向其原型对象的...