应该是这样的吧。for ( var p in {toString:null,abc:null} ){ alert(p); }
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]; }
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]; }
alert(p);
}
函数体
}
应写成
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];
}
函数体
}
应写成
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];
}