走进__proto__属性,看ie是否支持它,谁又来给他归宿
每一个引用类型的实例中,都有一个指针,指向其原型对象。这个指针在非IE浏览器里通过__proto__表示,而在IE里不提供。
看如下代码:
obj = {}; obj.__proto__.toString = function() { return "__proto__"; } var ceshi = {}; alert(ceshi);
输出结果就是__proto__。
原因:JavaScript中只有一个Object原型对象。
第二行,修改了这个原型对象的toString成员变量,而Object原型对象是所有引用类型实例共享的,只有一个,所以其他对象调用toString()也就发生了变化。
IE不提供这个__proto__,这样就不能获取到Object原型对象,也就无法修改这个上级的属性了。这样做就更安全了。
但是有什么方法可以代替么?
因为__proto__不是标准方法,标准的方法是Object.getPrototypeOf();
看如下代码:
var obj = {}; console.log(obj.__proto__);//输出Object {} //等于 Object.getPrototypeOf(obj);//输出Object {}