prototype.js里的代码:
Object.extend = function(destination, source) {
for (var property in source)
destination[property] = source[property];
return destination;
};
google doctype里的代码:
/**
* The names of the fields that are defined on Object.prototype.
* @type {Array.<string>}
* @private
*/
goog.object.PROTOTYPE_FIELDS_ = [
'constructor',
'hasOwnProperty',
'isPrototypeOf',
'propertyIsEnumerable',
'toLocaleString',
'toString',
'valueOf'
];
/**
* Extends an object with another object.
* This operates 'in-place'; it does not create a new Object.
*
* Example:
* var o = {};
* goog.object.extend(o, {a: 0, b: 1});
* o; // {a: 0, b: 1}
* goog.object.extend(o, {c: 2});
* o; // {a: 0, b: 1, c: 2}
*
* @param {Object} target The object to modify.
* @param {Object} var_args The objects from which values will be copied.
*/
goog.object.extend = function(target, var_args) {
var key, source;
for (var i = 1; i < arguments.length; i++) {
source = arguments[i];
for (key in source) {
target[key] = source[key];
}
// For IE the for-in-loop does not contain any properties that are not
// enumerable on the prototype object (for example isPrototypeOf from
// Object.prototype) and it will also not include 'replace' on objects that
// extend String and change 'replace' (not that it is common for anyone to
// extend anything except Object).
for (var j = 0; j < goog.object.PROTOTYPE_FIELDS_.length; j++) {
key = goog.object.PROTOTYPE_FIELDS_[j];
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
};
可以看出,google doctype多考虑了object的某些属性、方法,确保它们能够真正地被“extend”到新对象里。
参看资料:
http://code.google.com/doctype/
分享到:
相关推荐
JavaScript中的`Object.extend`是一个用于实现...在实际开发中,虽然现代JavaScript推荐使用`class`语法和`class extends`来实现继承,但`Object.extend`在早期的JavaScript代码中仍然常见,并且在某些场景下仍然有用。
在JavaScript中,jQuery库提供了两种扩展对象的方法,即`$.fn.extend`和`$.extend`。它们都用于增加或修改现有对象的功能,但应用场景不同。本文将深入解析这两种方法的实现原理和用途。 首先,`$.fn.extend`是用于...
jquery.validate.extend.js
在jQuery中,`$.fn`实际上是`$.prototype`的一个别名,因此`$.fn.extend`就是在扩展jQuery的原型,使得每个jQuery实例都可以访问到新添加的方法。 ### `$.fn.extend`的基本使用 `$.fn.extend`接收一个对象作为参数...
原生js实现jquery $.extend方法 通过遍历对象属性来实现
在jQuery的API中,`jQuery.extend`和`jQuery.fn.extend`是两个重要的方法,它们用于合并对象属性,但作用范围和用途有所不同。本文将深入探讨这两个方法的差异,并通过实例解析它们的工作原理。 首先,`jQuery....
在JavaScript开发中,`underscore` 和 `jQuery` 都提供了扩展对象的功能,即 `_.extend()` 和 `$.extend()` 方法。这两个方法允许开发者合并一个或多个对象的属性到目标对象中,实现对象间的属性拷贝。本文将深入...
在jQuery库中,`$.fn.extend` 和 `$.extend` 是两个非常重要的功能,它们用于扩展jQuery的功能和对象。这两个函数虽然名字相似,但作用却截然不同。 首先,`$.fn.extend` 是用于扩展jQuery选择器对象的方法。当你...
`jQuery.extend(target, object1, object2, ..., objectN)` 允许将多个对象的属性合并到目标对象`target`上。其基本语法如下: ```javascript var obj1 = {a: 1, b: 2}; var obj2 = {b: 3, c: 4}; $.extend(obj1, ...
在jQuery中,`$.extend()`、`.fn`(即`jQuery.fn`)和`.fn.extend()`是开发者用于增强其功能和创建插件的关键部分。下面我们将详细探讨这三个概念。 1. `$.extend()` `$.extend()`方法用于合并一个或多个对象的属性...
1.jquery.extend(object); 为扩展jQuery类本身.为类添加新的方法。 jquery.fn.extend(object);给jQuery对象添加方法。 $.extend({ add:function(a,b){return a+b;} }); //$.add(3,4); //return 7 jQuery添加...
- **`Object.prototype.extend`**:该方法使得任何对象都可以直接使用 `extend` 方法来自身扩展其他对象的属性。这是一种链式调用的方式,使得代码更加灵活。 #### 6. Function.prototype.bind 方法 ```javascript...
突然这么一问竟答不出来,回来想想有必要总结下,所以本文就来给大家介绍关于vue.extend和vue.component的区别,下面话不多说了,来一起看看详细的介绍吧。 Vue.extend 返回的是一个“扩展实例构造器”,也就是一个...
实现这样一个自定义的`Object.extend()`函数需要明确几个关键点:首先是如何确定函数调用时传递的参数数量和类型,其次是如何在递归过程中区分哪些是普通属性哪些是对象属性,最后是如何正确处理那些不能被复制的...
7. **字符串和对象操作** - prototype.js 也增强了String和Object对象,例如`String.prototype.parseColor()`解析颜色值,`Object.toJSON()`将对象转换成JSON格式。 通过学习和使用prototype.js,开发者可以编写出...
在给定的标题“javascript框架(json.jQuery.prototype).rar”中,我们可以推测这是一个关于JavaScript框架,特别是jQuery框架的教程或者参考资料。jQuery是广泛使用的JavaScript库,它简化了JavaScript的许多方面,...
### jQuery.extend 函数详解 #### 一、概述 在JavaScript前端开发中,jQuery是一个非常流行的库,它简化了许多常见的操作,比如DOM操作、事件处理、AJAX交互等。`jQuery.extend`是jQuery提供的一个用于扩展jQuery...
Prototype: Object.extend(destination, source) Underscore.js: _.extend(destination, *sources) Object.assign()介绍 ES6提供了Object.assign() ,用于合并/复制对象的属性。 Object.ass
此外,虽然`$.extend`是jQuery提供的便利工具,但在现代JavaScript中,我们可以使用`Object.assign`进行浅拷贝,或者使用`JSON.parse`和`JSON.stringify`组合实现简单的深拷贝。对于更复杂的深拷贝需求,可以考虑...