for ( var p in (toString:null) ){
   函数体
} 其中 var p in (toString:null)  有什么作用啊?
  谢谢各位大神了

解决方案 »

  1.   

    应该是这样的吧。for ( var p in {toString:null,abc:null} ){
    alert(p);
    }
      

  2.   

    for ( var p in (toString:null) ){
       函数体

    应写成 
     for  ( var p in {toString:null} ){
       函数体

    下面这段函数(摘自javascript 权威指南 p182页)中,o为要修补的目中程序代码中的某一对象,source为 修复的来源
    var p in {toString:null}   用来检测IE bug, 这个bug意义:null是特殊对象,但它不可以进行toString操作,因为toString是Object类的方法。根据for/in循环枚举属性的机制,如果在o的属性链中找到一个不可枚举的同名属性名,则则会屏蔽后面同名的可枚举属性。————————————————————————
          //特定场景下返回带补丁的extend()版本
          //定义一个扩展函数,用来将第二个以及后续参数复制至第一个参数
          //如果o的属性拥有一个不可枚举的同名属性,则for/in循环不会枚举对象o的可枚举属性,也就是说,将不会正确地处理诸如toString的属性,除非我们显式检测它
          var extend = (function(){ //将这个函数的返回值赋值给extend
                //在修复它之前,首先检查是否存在IE bug
                for( var p in {toString:null} ){  
                        //如果代码执行到这里,那么for/in循环会正确工作并返回
                        //一个简单版本的extend()函数
                      return function extend(o){
                             for(var i=1;i<arguments.length;i++){
                                  var source = arguments[i];
                                   for( var prop in source ) o[prop] =source[prop];
                                }
      

  3.   

    for ( var p in (toString:null) ){
       函数体

    应写成 
     for  ( var p in {toString:null} ){
       函数体

    下面这段函数(摘自javascript 权威指南 p182页)中,o为要修补的目中程序代码中的某一对象,source为 修复的来源
    var p in {toString:null}   用来检测IE bug, 这个bug意义:null是特殊对象,但它不可以进行toString操作,因为toString是Object类的方法。根据for/in循环枚举属性的机制,如果在o的属性链中找到一个不可枚举的同名属性名,则则会屏蔽后面同名的可枚举属性。————————————————————————
          //特定场景下返回带补丁的extend()版本
          //定义一个扩展函数,用来将第二个以及后续参数复制至第一个参数
          //如果o的属性拥有一个不可枚举的同名属性,则for/in循环不会枚举对象o的可枚举属性,也就是说,将不会正确地处理诸如toString的属性,除非我们显式检测它
          var extend = (function(){ //将这个函数的返回值赋值给extend
                //在修复它之前,首先检查是否存在IE bug
                for( var p in {toString:null} ){  
                        //如果代码执行到这里,那么for/in循环会正确工作并返回
                        //一个简单版本的extend()函数
                      return function extend(o){
                             for(var i=1;i<arguments.length;i++){
                                  var source = arguments[i];
                                   for( var prop in source ) o[prop] =source[prop];
                                }