javascript - TypeScript - Obiectul nu suportă proprietatea sau metoda 'defineProperty'
Recent am creat un proiect TypeScript pentru un motor de simulare relativ complex folosind Visual Studio, care, implicit, viza ECMAScript 3 (ES3). Am vrut să încep să folosesc proprietăți reale în clasele mele TypeScript, așa că mi-am actualizat fișierul de proiect pentru a viza ES5, astfel:
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
<TypeScriptTarget>ES5</TypeScriptTarget>
<TypeScriptRemoveComments>false</TypeScriptRemoveComments>
<TypeScriptSourceMap>true</TypeScriptSourceMap>
<TypeScriptModuleKind>AMD</TypeScriptModuleKind>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<TypeScriptTarget>ES5</TypeScriptTarget>
<TypeScriptRemoveComments>true</TypeScriptRemoveComments>
<TypeScriptSourceMap>false</TypeScriptSourceMap>
<TypeScriptModuleKind>AMD</TypeScriptModuleKind>
</PropertyGroup>
Acum, când rulez aplicația mea în IE (v10), primesc o excepție de timp de execuție: "0x800a01b6 - Eroare de timp de execuție JavaScript: Obiectul nu suportă proprietatea sau metoda 'defineProperty'". Dacă trec la lansarea aplicației mele cu orice alt browser (de exemplu, Firefox, Chrome), funcționează așa cum era de așteptat - fără erori. Nu reușesc să găsesc niciun motiv pentru care IE nu funcționează corespunzător. Am găsit un site care a confirmat că, în general, browser-ul meu IE suportă 'defineProperty', așa că acum sunt cu adevărat confuz de ce nu funcționează în timpul dezvoltării. Aceasta devine deosebit de critic deoarece nu pot depana codul meu TypeScript în VS. Orice sugestii?
Răspuns #1
Conform tabelului de compatibilitate ES5, Object.defineProperty este suportat în IE9 și versiunile ulterioare.
Suportul în IE8 este limitat.
Cu toate acestea, IE10 are obiceiul de a rula paginile locale și intranet în modul de compatibilitate, chiar dacă aceleași pagini rulează în modul normal pe Internet.
Poți schimba acest lucru în dialog în Instrumente > Setări modul de compatibilitate (dezactivează opțiunea „Afișează site-urile intranet în modul de compatibilitate”). De asemenea, poți preveni acest lucru folosind o combinație a tipului de document corect:
<!DOCTYPE html>
Sau un tag de compatibilitate pentru agenți de utilizator, care nu va mai fi necesar (sau acceptat) în IE11 și versiunile ulterioare.
<meta http-equiv="x-ua-compatible" content="IE=edge">
Aceasta trebuie să fie prima etichetă din cadrul elementului <head>.
