`
q474818917
  • 浏览: 39030 次
  • 性别: 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);
}
});
分享到:
评论

相关推荐

    Javascript Object.extend

    既然是类,那么就有抽象类,具体类,类的继承,同时,类的成员可以有实例成员和静态成员。下面来看一下prototype是怎么做到这些的。 先看prototype中的以下的代码: 代码如下: var Abstract = new Object(); Object....

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

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

    base-class-extend:BaseClass实用程序

    还支持从Array , Error或Node.js events.EventEmitter继承。 没有困难的关键字, 没有prototype ,没有__proto__ , 没有Object.defineProperty ,没有Object.setPrototypeOf等等只需要constructor 。 支持...

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

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

    使用apply方法实现javascript中的对象继承

    javascript中的对象继承的方法有很多,在接下来的文章中为大家介绍下使用apply方法是如何实现的

    小议Function.apply() 之一——(函数的劫持与对象的复制)

    关于对象的继承,一般的做法是用复制法: Object.extend 见protpotype.js 的实现方法: 代码如下:Object.extend = function(destination, source) { for (property in source) { destination[property] ...

    javascript 面向对象继承

    在prototype框架中的类继承实现机制 代码如下: //为Object类添加静态方法:extend Object.extend = function(destination, source) { for(property in source) { destination[property] = source[property];...

    js中apply方法的使用详细解析

    1、对象的继承,一般的做法是复制:Object.extendprototype.js的实现方式是: 代码如下:Object.extend = function(destination, source) { for (property in source) { destination[property] = source[property];...

    base-object:JavaScript 中继承的实现

    JavaScript 中继承的实现 怎么建? git clone 这个仓库 切换到新目录 npm install npm run build 用法 var Person = BaseObject . extend ( { init : function ( name , age ) { this . name = name ; this . ...

    Prototype使用指南之base.js

    base.js中包含下面的内容 类的创建与继承: Class.create(): 创建一个类,例如 person=Class.create() Object.extend(destination, source): 把source中方法属性copy到destination(使用for propertyin source),...

    Prototype使用指南之enumerable.js

    Enumerable是一个抽象对象(需要说明的是,javascript中并没有类的概念,所指的类也就是一个函数,继承一般指的是一个对象(父)将它的方法属性copy(通过Object.extend, copy的是引用)到子类(函数)的prototype属性(一...

    inheritance.js:一个使用纯 JavaScript 的对象继承的简单小实现

    继承.js 使用纯 JavaScript 实现对象继承的简单而小巧的实现。...extend功能添加到默认Object实现和更多内置 JS 对象。 () 完整文档 用法 创建新的对象定义(IE“类”) 在或上查看 var MyNewObje

    Ext Js权威指南(.zip.001

    4.3.2 ext.object中的静态方法 / 113 4.3.3 ext.function中的静态方法 / 120 4.3.4 ext.array中的静态方法 / 127 4.3.5 ext.error中的静态方法 / 133 4.4 深入了解类的创建及管理 / 135 4.4.1 开始创建类 / ...

    Class.Model.js:118行实现的一个简单的Javascript的对象模型

    118行实现的一个简单的Javascript的对象模型 这个文件中定义了类模型中类似于其他面向对象语言中的Object类。 如何新建类 作为基类,类的定义使用 var NewClass = Class.new(); 来进行定义。 通过以上方式定义的类...

    Javascript原型链的原理详解

    本文实例分析了Javascript原型链的原理。分享给大家供大家参考,具体如下: 一、JavaScript原型链 ECMAScript中描述了原型链的概念,并将原型链作为.../*扩展Object类,添加Clone,JS实现克隆的方法*/ Object.prototy

    new-base-class:使用基类扩展!

    还支持从Array 、 Error或 Node.js events.EventEmitter继承。 没有难的关键词, 没有constructor ,没有prototype ,没有__proto__ , 没有Object.defineProperty ,没有Object.setPrototypeOf等...... 安装: $...

    15分钟深入了解JS继承分类、原理与用法

    接口继承只继承方法签名,而实现继承则继承实际的方法。由于 ECMAScript 中的函数没有签名,所以在 JS 中无法实现接口继承。ECMAScript 只支持实现继承,而且其实现继承主要是依靠原型链来实现的。所以,下面所要说...

    js对象的复制继承实例

    本文实例讲述了js对象的复制继承。分享给大家供大家参考。具体如下: 代码如下:[removed] Object.prototype.extend = function(obj){  //在函数里,把obj属性复制到自身  for(var k in obj){  if(obj....

    对于JS继承详细介绍( 原型链,构造函数,组合,原型式,寄生式,寄生组合,Class extends)

    JS中继承可以按照是否使用object函数(在下文中会提到),将继承分成两部分(Object.create是ES5新增的方法,用来规范化这个函数)。 其中,原型链继承和原型式继承有一样的优缺点,构造函数继承与寄生式继承也相互...

Global site tag (gtag.js) - Google Analytics