JScript与SpiderMonkey对继承成员可见性的差异

Object是所有javascript对象的超类,其它对象都继承了Object的属性和方法。

 

Object默认有一个属性constructor,6个方法hasOwnProperty、isPrototypeOf、propertyIsEnumerable、toLocalString、toString和valueOf。(ECMAScript 3.1新增getPrototypeOf方法,firefox3.5已实现)

 

用for in是无法列举这些属性方法的。

var obj = {};
for(var atr in obj) 
	alert(atr);
 

虽然无法列举它们,但仍然可以存取(读写)它们。用obj.constructor属性做示例

//取
alert(obj.constructor);//Object()

//写
obj.constructor = null;

//这次输出则是null了
alert(obj.constructor);//null
 

关键这一句

obj.constructor = null;

obj.contructor属性被重写后,我们再用for in列举看看

for(var atr in obj) 
	alert(atr);//obj.constructor重写后,在firefox下输出了(可见),在IE下仍然不没有输出(不可见)

 

 

可见,在SpiderMonkey引擎下(firefox),重写继承来的隐藏的属性constructor后,constructor变得可见了。在JScript引擎下(IE)则仍然不可见。

 

 

 

你可能感兴趣的:(JavaScript,IE,firefox)