Что я должен сделать, чтобы этот скрипт тоже был совместим с IE8?
Измените его полностью. Например, вместо использования свойств средства доступа используйте комбинацию обычных свойств и функций:
human.firstName = 'Saeed';
human.lastName = 'Neamati';
alert(human.getFullName());
Кто-то еще предложил использовать объект DOM в IE и добавить свойства, используя 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. В любом случае безопаснее и проще писать код, который работает во всех браузерах, которые вы хотите поддерживать. Любое удобство, которое вы получаете от возможности написания кода для использования методов получения и установки, было потеряно в дополнительном коде, который вы написали специально для Internet Explorer 8.
Это, конечно, помимо снижения производительности, того факта, что вы не сможете использовать цикл for...in
на объекте, и потенциальной путаницы, возникающей при использовании свойства, которое вы считали определенным, но ранее существовал в объекте DOM.