`
wurui_0
  • 浏览: 2713 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

js 实现类式继承

    博客分类:
  • js
 
阅读更多
  1. /* Simple JavaScript Inheritance
  2.  * By John Resig http://ejohn.org/
  3.  * MIT Licensed.
  4.  */
  5. // Inspired by base2 and Prototype
  6. (function(){
  7.   var initializing = false, fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/;
  8.  
  9.   // The base Class implementation (does nothing)
  10.   this.Class = function(){};
  11.  
  12.   // Create a new Class that inherits from this class
  13.   Class.extend = function(prop) {
  14.     var _super = this.prototype;
  15.    
  16.     // Instantiate a base class (but only create the instance,
  17.     // don't run the init constructor)
  18.     initializing = true;
  19.     var prototype = new this();
  20.     initializing = false;
  21.    
  22.     // Copy the properties over onto the new prototype
  23.     for (var name in prop) {
  24.       // Check if we're overwriting an existing function
  25.       prototype[name] = typeof prop[name] == "function" &&
  26.         typeof _super[name] == "function" && fnTest.test(prop[name]) ?
  27.         (function(name, fn){
  28.           return function() {
  29.             var tmp = this._super;
  30.            
  31.             // Add a new ._super() method that is the same method
  32.             // but on the super-class
  33.             this._super = _super[name];
  34.            
  35.             // The method only need to be bound temporarily, so we
  36.             // remove it when we're done executing
  37.             var ret = fn.apply(this, arguments);        
  38.             this._super = tmp;
  39.            
  40.             return ret;
  41.           };
  42.         })(name, prop[name]) :
  43.         prop[name];
  44.     }
  45.    
  46.     // The dummy class constructor
  47.     function Class() {
  48.       // All construction is actually done in the init method
  49.       if ( !initializing && this.init )
  50.         this.init.apply(this, arguments);
  51.     }
  52.    
  53.     // Populate our constructed prototype object
  54.     Class.prototype = prototype;
  55.    
  56.     // Enforce the constructor to be what we expect
  57.     Class.prototype.constructor = Class;
  58.  
  59.     // And make this class extendable
  60.     Class.extend = arguments.callee;
  61.    
  62.     return Class;
  63.   };
  64. })();
分享到:
评论

相关推荐

    js中实现多态采用和继承类似的方法.docx

    本文将详细介绍如何在JavaScript中通过类似于继承的方式来实现多态。 #### 二、基本概念 在面向对象编程中,多态性允许子类对象被当作父类对象来使用,同时保持子类的特性。这主要通过重写父类的方法来实现。在...

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

    浅析JavaScript实现基于原型对象的“继承” 本文旨在对JavaScript实现基于原型对象的“继承”进行深入分析,并与基于类的继承进行比较。通过对JavaScript的原型继承机制的介绍和实例分析,提出一个改进的“寄生组合...

    javascript中类和继承(代码示例+prototype.js)

    JavaScript是一种动态类型的语言,它没有像Java或C++那样的传统类,而是使用函数作为构造器来模拟类的行为,并通过原型链实现继承。本文将深入探讨JavaScript中的类和继承,并结合`prototype.js`文件中的示例进行...

    前端模块化脚手架,可实现类似java的封装继承多态特性

    在前端模块化中,我们可以使用立即执行函数表达式(IIFE)或者ES6的模块系统(import/export)来实现类似的功能,将数据和功能封装在特定的作用域内,防止全局变量污染和其他模块的意外干扰。 **继承**:Java的继承...

    JavaScript中的继承之类继承_.docx

    JavaScript中的继承虽然基于原型,但通过各种技术手段仍然可以实现类似传统面向对象语言的功能。掌握JavaScript中的继承机制对于构建复杂的对象结构和提高代码复用性非常重要。随着ES6的普及,现代JavaScript提供了...

    js的原型继承

    JavaScript是一种基于原型(Prototype)的面向对象编程语言,它的继承机制不同于传统的类继承,而是采用原型链(Prototype Chain)的方式实现。在这个模式下,对象可以继承其他对象的属性和方法,形成一种“类”的...

    javascript 继承派生

    在JavaScript中,面向对象编程是其核心特性之一,而继承和派生则是实现面向对象的重要机制。本资料集合关注的是JavaScript中的继承派生以及与之相关的`apply`和`call`方法。 **继承**是面向对象编程的关键概念,...

    JavaScript中的类继承

    在JavaScript中实现类继承的一种方法是通过构造函数和原型链。例如,`Parenizor`构造函数创建了一个具有`setValue`、`getValue`和`toString`方法的对象。`ZParenizor`是`Parenizor`的子类,通过`inherits`方法(类似...

    JS:Call方法详解(js_的继承)

    虽然JavaScript不直接支持多重继承,但我们可以通过连续使用`call`方法来实现类似的效果。 **示例:** ```javascript function Class10() { this.showSub = function(a, b) { console.log(a - b); }; } ...

    javascript基于prototype实现类似OOP继承的方法

    本文将深入探讨如何利用`prototype`实现JavaScript中的类似OOP继承的方法。 首先,我们需要理解`prototype`的概念。在JavaScript中,每个函数都有一个`prototype`属性,这个属性是一个对象,它包含了一个名为`...

    js中实现多态采用和继承类似的方法

    多态的实现可以采用和继承类似的方法。首先定义一个抽象类,其中调用一些虚方法,虚方法在抽象类中没用定义,而是通过其具体的实现类来实现。 如下面的例子: Object.extend=function(destination,source){ for...

    JS伪继承prototype实现方法示例

    在阅读和理解上述内容时,需要注意的是,JavaScript的面向对象编程并不是传统意义上的类继承,而是通过函数和原型链来实现类似继承的行为。因此,在设计和实现继承时,需要对JavaScript的这种特性有深刻的理解,才能...

    13、JavaScript继承实现(二) —— zInherit、xbObjects

    zInherit是一种常用的JavaScript继承实现方式,它通过修改对象的`__proto__`属性来实现继承。`__proto__`指向父对象的原型,从而使得子对象能够访问父对象的属性和方法。但是,`__proto__`并不是所有浏览器都支持的...

    利用javascript中的call实现继承

    而`sun`通过类似的方式继承了`suber`和`father2`的属性和方法,实现了多重继承。 然而,需要注意的是,`call`方法不会继承父类的私有变量。在JavaScript中,由于闭包的作用,私有变量只存在于定义它们的函数作用域...

    实现JavaScript中继承的三种方式

    继承的方式有多种,而本文将详细探讨JavaScript实现继承的三种常用方式。 首先,我们来了解原型链继承。这是最传统也是最基本的继承方式,利用的是JavaScript基于原型的继承机制。在原型链继承中,子类型的原型对象...

    js遍历属性 以及 js prototype 和继承

    JavaScript使用原型链实现继承,这意味着一个对象可以从另一个对象继承属性和方法。主要有两种继承方式: 1. 构造函数继承(经典继承):通过`new`关键字创建一个父类(超类)的新实例,然后将其作为子类的`...

    JavaScript mixin实现多继承的方法详解

    JavaScript Mixin 是一种实现多继承的技术,它允许一个对象(或类)继承多个其他对象(或类)的特性。在JavaScript这种仅支持单一原型链继承的语言中,通过Mixin可以模拟多继承的效果。以下是对JavaScript Mixin实现...

    JavaScript 继承的实现

    总的来说,JavaScript的继承机制是通过构造函数和原型来实现的,它提供了一种灵活的方式来模拟面向对象的特性,使得开发者能够在JavaScript环境中实现类似于类和继承的功能。虽然这种方法与传统的面向对象语言有所...

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

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

Global site tag (gtag.js) - Google Analytics