Prototype如何扩展对象?

时间:2010-12-13 18:19:18

标签: javascript prototypejs

我在学习Javascript时一直在阅读Prototype源代码。我一直想知道用于扩展Native Objects的代码在哪里。

我一直在看,

Object.extend(Function.prototype, (function() {
Object.extend(String.prototype, (function() {
Object.extend(Number.prototype, (function() {

到处都是,我无法找到.extend函数的来源。

我见过这个:

  function extend(destination, source) {
    for (var property in source)
      destination[property] = source[property];
    return destination;
  }

在第194-198行并且想知道这是否是那个。我不知道它是怎么回事,如果是的话。

无论如何,我上面提到的问题是Prototype如何/在哪里扩展Native对象。

2 个答案:

答案 0 :(得分:3)

是的,这是您正在看到的功能,稍后您将看到它用于获取Object.extend的代码,如下所示:

extend(Object, {
    extend: extend, //here's where the magic gets added
    inspect: inspect,
    toJSON: NATIVE_JSON_STRINGIFY_SUPPORT ? stringify : toJSON,
    toQueryString: toQueryString,
    toHTML: toHTML,
    keys: Object.keys || keys,
    values: values,
    clone: clone,
    isElement: isElement,
    isArray: isArray,
    isHash: isHash,
    isFunction: isFunction,
    isString: isString,
    isNumber: isNumber,
    isDate: isDate,
    isUndefined: isUndefined
});

因此,它会将extend()作为要添加到Object原型的属性进行调用,并将其自身添加为.extend上的Object方法。

答案 1 :(得分:1)

如果你看一下这里的源代码:
https://github.com/sstephenson/prototype/blob/master/src/prototype/lang/object.js  你会看到这个:

alt text