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 方法的主要内容,如果未能解决你的问题,请参考以下文章

isPrototypeOf&&getPrototypeOf

Object.getPrototypeOf() 混淆

Effective JavaScript Item 30 理解prototype, getPrototypeOf和__proto__的不同

object.getPrototypeOf函数(javascript)

javascript:Object 对象的相关方法

ES5 方法学习