Kann jemand erklären:
Warum _extend zweimal erscheint? Was bedeuten sie? Bedeutet das, dass die Standardmethode aufgerufen wird? ?
Das erste Mal ist Base.prototype._extend
.
Was stellen Ziel und Quelle besonders beim zweiten Mal dar?
_extend = function self(destination, source) {
......
}
Hier ist der Teil des Codes, der mich verwirrt hat:
define(function(){
var Base = function(){};
Base.prototype._extend = function(dest, src){
var _complete,
_extend,
_isObject;
_isObject = function(o){
return (Object.prototype.toString.call(o) === '[object Object]' || Object.prototype.toString.call(o) === '[object Array]');
},
_extend = function self(destination, source) {
var property;
for (property in destination) {
if (destination.hasOwnProperty(property)) {
if (_isObject(destination[property]) && _isObject(source[property])) {
self(destination[property], source[property]);
};
if (source.hasOwnProperty(property)) {
continue;
} else {
source[property] = destination[property];
}
}
}
}
//省略部分代码...
}})
_extend第一个是变量声明,第二个是变量赋值。
作用就是 遍历destination变量,并将它内部的属性复制到source上,如果source上已经存在该属性则不复制。