我应该怎么做才能使这个脚本也兼容 IE8?
彻底改变它。例如,不使用访问器属性,而是使用普通属性和函数的组合:
human.firstName = 'Saeed';
human.lastName = 'Neamati';
alert(human.getFullName());
其他人建议在 IE 中使用 DOM 对象并使用以下命令添加属性Object.defineProperty()
。虽然它可能有效,但出于多种原因,我强烈建议不要使用这种方法,例如您编写的代码可能并不在所有浏览器中兼容:
var human = document.createElement('div');
Object.defineProperty(human, 'firstName', { ... });
Object.defineProperty(human, 'lastName', { ... });
Object.defineProperty(human, 'children', { value: 2 });
alert(human.children);
//-> "[object HTMLCollection]", not 2
至少 Chrome 是这样。无论哪种方式,编写可在您想要支持的所有浏览器上运行的代码都会更安全、更轻松。通过编写代码来利用 getter 和 setter 所获得的任何便利,都因专门针对 Internet Explorer 8 编写的额外代码而丧失。
当然,除了性能下降之外,您将无法使用for...in
对象上的循环以及当您使用您认为自己定义但预先存在于 DOM 对象上的属性时可能会发生的混乱。