4

MDNObject.create使用 1 个参数指定了一个 polyfill:

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) }
}});

我猜这个没有解决方案,就像Object.defineProperty在 IE < 9 中无法使用一样(DOM 元素除外)。

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

我所说的“hacky”是指这样的:

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

0 回答 0