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) { // 一个静态方法, 传入一个对象, 克隆一个新对象并返回
return Object.extend({}, object);
}
});
转自:http://www.cnblogs.com/5201314/archive/2009/05/22/1487213.html
分享到:
相关推荐
var Video = Xut.CoreObject.extend(); 2.怎样创建一个类并指定构造函数 var Video = Xut.CoreObject.extend({ init : function(){ //初始化代码放这里 //this.name = 'video'; } }); 3.怎样扩展类的原型 //...
而不是使用_.extend(obj1, obj2...)或xtend(obj1, obj2...)只需在你的代码中使用Object.assign并为 Babel 包含这个插件。 安装: $ npm install babel babel-plugin-object-assign 用: $ babel --plugins ...
javascript中的对象继承的方法有很多,在接下来的文章中为大家介绍下使用apply方法是如何实现的
在jquery中,extend其实在做插件时还是用的比较多的,今天同时小结jquery和ext js中 的extend用法,先来看jquery中的。 1) extend(dest,src1,src2,src3…); 代码如下: var start = { id: 123, count: 41, desc: ...
JavaScript中并没有直接提供对象复制(Object Clone)的方法。因此下面的代码中改变对象b的时候,也就改变了对象a。 a = {k1:1, k2:2, k3:3}; b = a; b.k2 = 4; 如果只想改变b而保持a不变,就需要对对象a进行复制。 ...
extend ( 'ObjectExtension' , { foo : { type : db1 . String , value : 'bar' } , } ) dbjsCopy ( db1 . ObjectExtension , db2 ) ; db2 . ObjectExtension . __id__ ; // 'ObjectExtension' db2 . Object...
base.js中包含下面的内容 类的创建与继承: Class.create(): 创建一个类,例如 person=Class.create() Object.extend(destination, source): 把source中方法属性copy到destination(使用for propertyin source),...
用法 ES5(传统) App . ExampleController = Ember . Controller . extend ( { geolocation : Ember . computed . injection ( 'service:geolocation' ) } ) ; 这假设您有一些像这样定义的现有类: App . ...
使用 Aspect,可以允许你在指定方法执行的前后插入特定函数。 使用说明 基于 Base.extend 创建的类,会自动添加上 Aspect 提供的功能。 before object.before(methodName, callback, [context]) 在 object[method...
类的定义通过向Class.new()方法亦或是Parent.extend()方法中传入参数来进行,形如下面的定义: { prop1 : null, prop2 : null, ... propN : null, initialize : function(args){/*initialize 方式是类在实例化...
本文实例讲述了Javascript 对象...方法1:使用JQuery的extend方法 **方法定义**:jQuery.extend([deep], target, object1, [objectN]) > 用一个或多个其他对象来扩展一个对象,返回被扩展的对象。 > 如果不指定ta
这是ember-cli插件,它提供了一种定义计算属性的替代方法。 它的工作方式与Ember.computed类似,只是它将函数作为第一个参数,而不是最后一个。 (这与使用.property原型扩展定义计算属性时使用的顺序相同。) 安装...
只需在JavaScript中扩展类用法与CommonJS和AMD兼容。 var Cla55 = require ( 'cla55' ) ;Cla55 . extend ( protoProps , staticProps , _super ) ;Cla55 . create ( Parent , protoProps , staticProps , _super ) ;...
var Child = Object . create ( Parent , { foo : { "value" : 10 } , bar : { "value" : function ( ) { /* ... */ } } } ) ; 并开始写这个: var Child = extend ( Parent , { foo : 10 , bar : ...
使用 Ember 1.11+ 测试 API 文档 你可以在这里找到 API 文档 用法 App . CreditCard = Em . Object . extend ( Em . Validator . Support , { validations : { name : { rules : [ 'required' ] } , number : ...
使用安装包mrt add parse-sdk 用法 (Coffeescript) 您必须先进行初始化,然后才能执行任何其他操作。 当您启动您的帐户/应用程序时,Parse 将为您提供这一行。 Parse . initialize " your-app-ID " , " your-js-id ...
Enumerable是一个抽象对象(需要说明的是,javascript中并没有类的概念,所指的类也就是一个函数,继承一般指的是一个对象(父)将它的方法属性copy(通过Object.extend, copy的是引用)到子类(函数)的prototype属性(一...
JavaScript 中继承的实现 怎么建? git clone 这个仓库 切换到新目录 npm install npm run build 用法 var Person = BaseObject . extend ( { init : function ( name , age ) { this . name = name ; this . ...
阅读器,编写器和访问器只是使用Object.defineProperty的快速方法,而无需使用它的所有样板文件。 告诉我你的举动! var Parent = extend ( ) ; // by default, extend from object. // You always need an ...
灰烬模块Codemod 此codemod使用更新Ember应用程序以使用模块语法导入框架代码,如。 它可以更新使用全局Ember应用程序,并且最终还将支持使用应用程序。 例如,它将重写如下代码: export default Ember . Component...