IE8 getPrototypeOf 方法
Posted
技术标签:
【中文标题】IE8 getPrototypeOf 方法【英文标题】:IE8 getPrototypeOf method 【发布时间】:2012-06-06 18:23:33 【问题描述】:很简单:
我有代码使用Object.getPrototypeOf(...)
来获取Dojo Widget 的继承类(只是一个JS 对象)。 IE8 不支持Object.getPrototypeOf(...)
。我需要一个 IE 解决方法。有任何想法吗?提前致谢。
【问题讨论】:
John Resig 的博文应该有所帮助:ejohn.org/blog/objectgetprototypeof 做到了。回答这个坏男孩,我会接受。谢谢。 【参考方案1】:Jon Resig 的 polyfill 作品 http://ejohn.org/blog/objectgetprototypeof/
我把它做得更小了
if (typeof Object.getPrototypeOf !== "function")
Object.getPrototypeOf = "".__proto__ === String.prototype
? function (object)
return object.__proto__;
: function (object)
// May break if the constructor has been tampered with
return object.constructor.prototype;
;
【讨论】:
【参考方案2】:使用https://github.com/kriskowal/es5-shim。除此之外,它还支持Object.getPrototypeOf。
来源:ECMAScript 5 polyfills from Modernizr project
【讨论】:
【参考方案3】:使用 Dojo.declared 创建的类及其超类存储元数据,因此您无需使用 getPrototypeOf。
我认为你可以得到第一个超类
MyClass.prototype.constructor._meta.bases[1]
及其原型
MyClass.prototype.constructor._meta.bases[1].prototype
(bases[0] 似乎是类本身)
尽管您为什么还需要获得原型?您很可能最终会重新实现 dojo.declare 已经提供的某些功能
【讨论】:
以上是关于IE8 getPrototypeOf 方法的主要内容,如果未能解决你的问题,请参考以下文章
Effective JavaScript Item 30 理解prototype, getPrototypeOf和__proto__的不同