最近在看《JavaScript权威指南 第6版》这本书,今天在书上看到这样一段代码,看不懂,虽然书上有写大概干些什么,但是具体到每一句代码我就不知道它的思路了,希望各路高手大神能够帮我加点注释,便于我理解,先谢谢大家了.这本书我不是从开头开始看的,不知道是不是要把前面的几章先看了。
var extend=(function(){
for(var p in { toString:null}){
return function extend(o){
for(var i=1;i < arguments.length; i++ ){
var source = arguements[i];
for (var prop in source ) o[prop] = source[prop];
}
return o;
};
}
return function patched_extend(o){
for(var i = 1;i < arguments.length; i++){
var source = arguments[i];
for(var prop in source) o[prop] = source[prop];
for(var j = 0; j < protoprops.length;j++){
prop = protoprops[j];
if(source.hasOwnProperty(prop)) o[prop] = source[prop];
}
}
return o;
};
var protoprops = ["toString","valueOf","constructor","hasOwnProperty",
"isPrototypeOf","propertyIsEnumerable","toLocaleString"];
}());
javascript
------解决方案--------------------
extend 功能,第2个,第3个....参数的对象属性,扩展到第1个参数上
我看了下也有疑问, for(var p in { toString:null}) 有什么情况,什么理由不成立?,这是他原文?
var extend=(function(){
for(var p in { toString:null}){ //我认为是永真, 我还真不知道为什么要这么写
return function extend(o){ //其实返回extend就是这一个函数
for(var i=1;i < arguments.length; i++ ){ //从第一参数开始循环
var source = arguements[i];
for (var prop in source ) o[prop] = source[prop]; //把第 i 个参数上的属性拷贝到时 第一个参数上
}
return o;
};
}
////我认为后面的没用
return function patched_extend(o){
for(var i = 1;i < arguments.length; i++){
var source = arguments[i];