我在学习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对象。
答案 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
你会看到这个: