Three.js: Bug function.prototype.name di Internet Explorer

Dibuat pada 27 Sep 2017  ·  3Komentar  ·  Sumber: mrdoob/three.js

Deskripsi masalah

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?

Versi Three.js
  • [ ] Dev
  • [x] r87
  • [ ] ...
Peramban
  • [ ] Mereka semua
  • [ ] Chrome
  • [ ] Firefox
  • [x] Internet Explorer
OS
  • [ ] Mereka semua
  • [ ] Jendela
  • [x] macOS
  • [ ] Linux
  • [ ] Android
  • [ ] iOS
Bug

Komentar yang paling membantu

Saya mengkonfirmasi bahwa hanya mengubah if sudah cukup.

if ( 'name' in Function.prototype === false ) {

itu cara untuk pergi!

Semua 3 komentar

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!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat