确定JavaScript对象原型的最佳方法是什么?我知道以下两种方法,但我不确定在跨浏览器支持方面哪种方式是“最佳”(或者如果有更好的首选方式)。
if (obj.__proto__ === MY_NAMESPACE.Util.SomeObject.prototype) {
// ...
}
或
if (obj instanceof MY_NAMESPACE.Util.SomeObject) {
// ...
}
答案 0 :(得分:6)
instanceof
是首选。 __proto__
是非标准的 - 具体来说,它在Internet Explorer中不起作用。
Object.getPrototypeOf(obj)
是一个ECMAScript 5函数,与__proto__
完全相同。
请注意instanceof
搜索整个原型链,而getPrototypeOf
只查找一步。
一些使用说明:
new String() instanceof String // true
(new String()).__proto__ == String // false!
// the prototype of String is (new String(""))
Object.getPrototypeOf(new String()) == String // FALSE, same as above
(new String()).__proto__ == String.prototype // true! (if supported)
Object.getPrototypeOf(new String()) == String.prototype // true! (if supported)
答案 1 :(得分:3)
instanceof
是标准的,而__proto__
则不是(还是 - it will most likely be standard in ECMAScript 6)。