用于IE支持的Object.create(proto,propertiesObject)polyfill

时间:2013-06-02 15:28:22

标签: javascript

MDN使用1个参数为Object.create指定了一个填充:

if (!Object.create) {
    Object.create = (function(){
        function F(){}

        return function(o){
            if (arguments.length != 1) {
                throw new Error('Object.create implementation 
                                 only accepts one parameter.');
            }
            F.prototype = o
            return new F()
        }
    })()
}

但是我想利用第二个参数并在IE中做出类似这样的工作< 9:

o = Object.create(Object.prototype);


// Example where we create an object with a couple of sample properties.
// (Note that the second parameter maps keys to *property descriptors*.)
o = Object.create(Object.prototype, {
  // foo is a regular "value property"
  foo: { writable:true, configurable:true, value: "hello" },
  // bar is a getter-and-setter (accessor) property
  bar: {
    configurable: false,
    get: function() { return 10 },
    set: function(value) { console.log("Setting `o.bar` to", value) }
}});

我的猜测是没有解决方案,因为在IE中不可能使用Object.defineProperty< 9(DOM元素除外)。

所以,我的问题是:在IE7 + 8中是否有任何非hacky解决方案重新创建此行为?

而“hacky”我的意思是这样的:

var myObject = document.createElement('fake');

0 个答案:

没有答案