Three.js: خطأ Function.prototype.name في Internet Explorer

تم إنشاؤها على ٢٧ سبتمبر ٢٠١٧  ·  3تعليقات  ·  مصدر: mrdoob/three.js

وصف المشكلة

أنا أستخدم ثلاثة في مشروع Aurelia-CLI. هذا يعني أنه يتم تحميله باستخدام الوحدات النمطية و RequireJS. يعمل بشكل جيد باستثناء Internet Explorer (تم اختباره في IE 11).

الكود الذي ينكسر هو التالي (في قسم polyfill في الأعلى ، الأسطر 42-57) في الملف /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 ];

    }

  } );

}

تقوم بإرجاع الخطأ can't redefine non-configurable property "name" .

بعد هذا المنشور ، حاولت استبدال الكود أعلاه بـ:

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;
    }
  });
}

ويصلح المشكلة!

=> يبدو أن كود polyfill المستخدم حاليًا في /build/three.js لا يعمل بشكل جيد. هل من الممكن استبدال هذا الرمز للبنيات المستقبلية؟

إصدار Three.js
  • [] ديف
  • [x] r87
  • [] ...
المستعرض
  • [] كل منهم
  • [ ] كروم
  • [ ] ثعلب النار
  • [x] إنترنت إكسبلورر
نظام التشغيل
  • [] كل منهم
  • [ ] شبابيك
  • [x] macOS
  • [] لينكس
  • [ ] ذكري المظهر
  • [] iOS
Bug

التعليق الأكثر فائدة

أؤكد أن تغيير if يكفي فقط.

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

انها الطريق للذهاب!

ال 3 كومينتر

هل تغيير الشيك لهذا سيحدث أي فرق؟

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

أو

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

أؤكد أن تغيير if يكفي فقط.

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

انها الطريق للذهاب!

مثبت. شكرا!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات