Saya menggunakan TIGA dalam proyek Aurelia-CLI. Artinya dimuat menggunakan modul dan RequireJS. Ini berfungsi dengan baik kecuali di Internet Explorer (diuji di IE 11).
Kode yang rusak adalah sebagai berikut (pada bagian polyfill di atas, baris 42-57) di file /build/three.js
if ( Function.prototype.name === undefined ) {
// Missing in IE
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name
Object.defineProperty( Function.prototype, 'name', {
get: function () {
return this.toString().match( /^\s*function\s*([^\(\s]*)/ )[ 1 ];
}
} );
}
Ini mengembalikan kesalahan can't redefine non-configurable property "name"
.
Mengikuti posting ini saya sudah mencoba mengganti kode di atas dengan:
if (!(function f() {}).name) {
Object.defineProperty(Function.prototype, 'name', {
get: function() {
var name = (this.toString().match(/^function\s*([^\s(]+)/) || [])[1];
// For better performance only parse once, and then cache the
// result through a new accessor for repeated access.
Object.defineProperty(this, 'name', { value: name });
return name;
}
});
}
Dan itu memperbaiki masalah!
=> Tampaknya kode polyfill yang saat ini digunakan di /build/three.js tidak berfungsi dengan baik. Apakah mungkin untuk mengganti kode ini untuk build mendatang?
Akankah mengubah cek menjadi ini membuat perbedaan?
if ( 'name' in Function.prototype === false ) {
Atau
if ( Function.prototype.hasOwnProperty( 'name' ) === false ) {
Saya mengkonfirmasi bahwa hanya mengubah if
sudah cukup.
if ( 'name' in Function.prototype === false ) {
itu cara untuk pergi!
Tetap. Terima kasih!
Komentar yang paling membantu
Saya mengkonfirmasi bahwa hanya mengubah
if
sudah cukup.itu cara untuk pergi!