`
q474818917
  • 浏览: 40444 次
  • 性别: Icon_minigender_1
  • 来自: 扬州
社区版块
存档分类
最新评论

js继承的实现---object.extend(d,s)方法

 
阅读更多
Object.extend = function (destination, source) {
for ( var property in source) {
    destination[property] = source[property];
}
return destination;
}
Prototype 对Object类进行的扩展主要通过一个静态函数Object.extend(destination, source)实现了JavaScript中的继承。 从语义的角度, Object.extend(destination, source)方法有些不和逻辑, 因为它事实上仅仅实现了从源对象到目标对象的全息拷贝。不过你也可以这样认为:由于目标对象拥有了所有源对象所拥有的特性, 所以看上去就像目标对象继承了源对象(并加以扩展)一样。另外, Prototype对Object扩展了几个比较有用的静态方法, 所有其他的类可以通过调用这些静态方法获取支持。
JScript code
Object.extend=function(destination, source) { // 一个静态方法表示继承, 目标对象将拥有源对象的所有属性和方法
for (var property in source) {
    destination[property] = source[property];   // 利用动态语言的特性, 通过赋值动态添加属性与方法
}
return destination;   // 返回扩展后的对象
}

Object.extend(Object, {
inspect: function(object) {   // 一个静态方法, 传入一个对象, 返回对象的字符串表示
    try {
      if (object == undefined) return'undefined'; // 处理undefined情况
      if (object ==null) return'null';     // 处理null情况
      // 如果对象定义了inspect方法, 则调用该方法返回, 否则返回对象的toString()值
      return object.inspect ? object.inspect() : object.toString();
    } catch (e) {
      if (e instanceof RangeError) return'...'; // 处理异常情况
      throw e;
    }
},
keys: function(object) {     // 一个静态方法, 传入一个对象, 返回该对象中所有的属性, 构成数组返回
    var keys = [];
    for (var property in object)
      keys.push(property);     // 将每个属性压入到一个数组中
    return keys;
},
values: function(object) {   // 一个静态方法, 传入一个对象, 返回该对象中所有属性所对应的值, 构成数组返回
    var values = [];
    for (var property in object) values.push(object[property]); // 将每个属性的值压入到一个数组中
    return values;
},
clone: function(object) {    // 一个静态方法, 传入一个对象, 克隆一个新对象并返回
    returnObject.extend({}, object);
}
});
分享到:
评论

相关推荐

    js代码-手写代码练习---extend 与 Object.create 实现

    在JavaScript中,`extend` 和 `Object.create` 都是用来实现对象继承的方法,它们在不同的场景下有不同的优势和用途。让我们深入探讨这两种方法的工作原理、使用场景以及它们之间的区别。 首先,`extend` 是一种...

    Javascript Object.extend

    `Object.extend`方法对于理解JavaScript的继承机制至关重要,它帮助我们实现类之间的属性和方法共享,从而构建更复杂和可复用的代码结构。在实际开发中,虽然现代JavaScript推荐使用`class`语法和`class extends`来...

    prototype-1.6.0.2.js.rar

    1. **Object.extend**:用于扩展对象的属性和方法,这是Prototype实现继承的基础。 2. **Function.prototype.bind**:让函数拥有指定的上下文(this值),解决了JavaScript中this动态绑定的问题。 3. **Element**和*...

    ember-disable-prototype-extensions-源码.rar

    在JavaScript中,对象可以通过原型链实现继承。通过`Object.prototype`,我们可以为所有对象添加方法。然而,一些库或框架,包括Ember,有时会直接扩展JavaScript的基本类型(如Array、String、Number等)的原型,以...

    js继承实现示例代码

    ### JavaScript继承实现示例 #### 知识点概述 在JavaScript中,继承是一种常见的对象间关系,它允许一个对象(子类)继承另一个对象(父类或超类)的属性和方法。通过继承,可以复用代码、提高程序的可维护性,并...

    jQuery.extend

    `jQuery.extend(target, object1, object2, ..., objectN)` 允许将多个对象的属性合并到目标对象`target`上。其基本语法如下: ```javascript var obj1 = {a: 1, b: 2}; var obj2 = {b: 3, c: 4}; $.extend(obj1, ...

    JavaScript Object的extend是一个常用的功能

    理解和掌握`Object.extend()`的原理和实现方法,能够帮助开发者更加高效地管理项目中的数据和逻辑。而实现深拷贝的能力,特别在处理复杂的数据结构时,显得尤为重要。通过递归的方式实现深拷贝,可以确保在对象合并...

    33-util (实用工具).pdf

    这个函数用于实现类继承。`constructor`是子类构造器,`superConstructor`是父类构造器。例如: ```javascript const EventEmitter = require('events'); function MyStream() { EventEmitter.call(this); } ...

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

    ### JavaScript中实现多态的方法 #### 一、前言 在面向对象编程中,多态是一种重要的特性,它允许我们使用一个接口表示多种类型的对象。JavaScript作为一种动态语言,虽然不像Java或C#那样原生支持类和接口的概念,...

    前端开源库-class-extend

    子类可以通过调用`extend`方法从基类派生,这与JavaScript中的`Object.create`或`prototype`机制相似,但提供了更友好的API。 2. **方法重写与继承**:子类可以重写基类的方法,同时仍然保留对基类方法的访问。这种...

    extjs学习笔记

    - `extend`:实现单一继承。 - `mixins`:支持多继承。 - `statics`:定义静态属性或方法,这些不会被子类继承。 - `inheritableStatics`:定义可被子类继承的静态属性或方法。 - `alias`:配置类的别名。 - `...

    prototype 1.3 源码解读

    - **`Object.extend`**:该方法用于将源对象的所有属性复制到目标对象中,是实现继承的一种方式。例如,`var c = a.extend(b);` 之后,`c` 同时拥有 `a` 和 `b` 的所有属性,但 `c instanceof ObjectB` 的结果为 `...

    详解Javascript继承的实现

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

    Extend

    JavaScript提供了多种方法来实现对象扩展,包括原型链、Object.create()、ES6的类继承以及Object.assign()等。此外,许多工具库也有自己的extend方法,为开发人员提供了更便捷的接口。而“arweb1.js”可能是一个包含...

    Prototype-3.pdf

    综上所述,Prototype框架为JavaScript提供了更强大的面向对象编程支持,通过`Class.create`和`Object.extend`等方法改进了JavaScript的类和继承机制。这对于希望利用JavaScript进行复杂Web开发的开发者来说是一个...

    prototype-1.4.0源码解读.js

    Prototype 通过`Object.extend`方法实现了对JavaScript原生对象的扩展。它允许开发者将一个对象的属性和方法复制到另一个对象上,增强了JavaScript的对象模型。此外,`Object.keys`方法用于获取对象的所有属性名,...

    mini-extend:基于原型和构造函数实现的继承类

    基于原型和构造函数实现的继承类 前言 关于javascript是没有原生的继承语法的,为此我们需要借鉴其它语言(比如PHP)来模拟这一过程。 这个库就是为了解决这个问题产生的。 基本用法 1.怎样创建一个最简单的类作为...

Global site tag (gtag.js) - Google Analytics