أنا أستخدم ثلاثة في مشروع 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 لا يعمل بشكل جيد. هل من الممكن استبدال هذا الرمز للبنيات المستقبلية؟
هل تغيير الشيك لهذا سيحدث أي فرق؟
if ( 'name' in Function.prototype === false ) {
أو
if ( Function.prototype.hasOwnProperty( 'name' ) === false ) {
أؤكد أن تغيير if
يكفي فقط.
if ( 'name' in Function.prototype === false ) {
انها الطريق للذهاب!
مثبت. شكرا!
التعليق الأكثر فائدة
أؤكد أن تغيير
if
يكفي فقط.انها الطريق للذهاب!