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