`
muyu
  • 浏览: 222717 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于object.extend在prototype和google doctype里的对比

阅读更多

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中的`Object.extend`是一个用于实现...在实际开发中,虽然现代JavaScript推荐使用`class`语法和`class extends`来实现继承,但`Object.extend`在早期的JavaScript代码中仍然常见,并且在某些场景下仍然有用。

    Jquery实现$.fn.extend和$.extend函数_.docx

    在JavaScript中,jQuery库提供了两种扩展对象的方法,即`$.fn.extend`和`$.extend`。它们都用于增加或修改现有对象的功能,但应用场景不同。本文将深入解析这两种方法的实现原理和用途。 首先,`$.fn.extend`是用于...

    jquery.validate.extend.js

    jquery.validate.extend.js

    jquery $.fn.extend

    在jQuery中,`$.fn`实际上是`$.prototype`的一个别名,因此`$.fn.extend`就是在扩展jQuery的原型,使得每个jQuery实例都可以访问到新添加的方法。 ### `$.fn.extend`的基本使用 `$.fn.extend`接收一个对象作为参数...

    原生js实现jquery $.extend方法

    原生js实现jquery $.extend方法 通过遍历对象属性来实现

    jQuery.extend和jQuery.fn.extend的区别

    在jQuery的API中,`jQuery.extend`和`jQuery.fn.extend`是两个重要的方法,它们用于合并对象属性,但作用范围和用途有所不同。本文将深入探讨这两个方法的差异,并通过实例解析它们的工作原理。 首先,`jQuery....

    underscore.extend与$.extend实例比较分析

    在JavaScript开发中,`underscore` 和 `jQuery` 都提供了扩展对象的功能,即 `_.extend()` 和 `$.extend()` 方法。这两个方法允许开发者合并一个或多个对象的属性到目标对象中,实现对象间的属性拷贝。本文将深入...

    Jquery实现$.fn.extend和$.extend函数

    在jQuery库中,`$.fn.extend` 和 `$.extend` 是两个非常重要的功能,它们用于扩展jQuery的功能和对象。这两个函数虽然名字相似,但作用却截然不同。 首先,`$.fn.extend` 是用于扩展jQuery选择器对象的方法。当你...

    jQuery.extend

    `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和$.fn.extend()

    在jQuery中,`$.extend()`、`.fn`(即`jQuery.fn`)和`.fn.extend()`是开发者用于增强其功能和创建插件的关键部分。下面我们将详细探讨这三个概念。 1. `$.extend()` `$.extend()`方法用于合并一个或多个对象的属性...

    浅谈jquery.fn.extend与jquery.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添加...

    prototype 1.3 源码解读

    - **`Object.prototype.extend`**:该方法使得任何对象都可以直接使用 `extend` 方法来自身扩展其他对象的属性。这是一种链式调用的方式,使得代码更加灵活。 #### 6. Function.prototype.bind 方法 ```javascript...

    关于vue.extend和vue.component的区别浅析

    突然这么一问竟答不出来,回来想想有必要总结下,所以本文就来给大家介绍关于vue.extend和vue.component的区别,下面话不多说了,来一起看看详细的介绍吧。 Vue.extend 返回的是一个“扩展实例构造器”,也就是一个...

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

    实现这样一个自定义的`Object.extend()`函数需要明确几个关键点:首先是如何确定函数调用时传递的参数数量和类型,其次是如何在递归过程中区分哪些是普通属性哪些是对象属性,最后是如何正确处理那些不能被复制的...

    prototype.js简介

    7. **字符串和对象操作** - prototype.js 也增强了String和Object对象,例如`String.prototype.parseColor()`解析颜色值,`Object.toJSON()`将对象转换成JSON格式。 通过学习和使用prototype.js,开发者可以编写出...

    javascript框架(json.jQuery.prototype).rar

    在给定的标题“javascript框架(json.jQuery.prototype).rar”中,我们可以推测这是一个关于JavaScript框架,特别是jQuery框架的教程或者参考资料。jQuery是广泛使用的JavaScript库,它简化了JavaScript的许多方面,...

    jQuery.extend 函数详解

    ### jQuery.extend 函数详解 #### 一、概述 在JavaScript前端开发中,jQuery是一个非常流行的库,它简化了许多常见的操作,比如DOM操作、事件处理、AJAX交互等。`jQuery.extend`是jQuery提供的一个用于扩展jQuery...

    ES6中新增的Object.assign()方法详解

    Prototype: Object.extend(destination, source) Underscore.js: _.extend(destination, *sources) Object.assign()介绍 ES6提供了Object.assign() ,用于合并/复制对象的属性。 Object.ass

    浅拷贝深拷贝之jQuery中的$.extend分析

    此外,虽然`$.extend`是jQuery提供的便利工具,但在现代JavaScript中,我们可以使用`Object.assign`进行浅拷贝,或者使用`JSON.parse`和`JSON.stringify`组合实现简单的深拷贝。对于更复杂的深拷贝需求,可以考虑...

Global site tag (gtag.js) - Google Analytics