MDN为Object.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');