日期:2014-05-16  浏览次数:20298 次

一段JavaScript代码,求高手解惑
最近在看《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++){
     &n