Estoy usando TRES en un proyecto Aurelia-CLI. Significa que se carga usando módulos y RequireJS. Todo funciona bien excepto en Internet Explorer (probado en IE 11).
El código que se rompe es el siguiente (en la sección de polyfill en la parte superior, líneas 42-57) en el archivo /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 ];
}
} );
}
Devuelve el error can't redefine non-configurable property "name"
.
Después de esta publicación , intenté reemplazar el código anterior con:
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;
}
});
}
¡Y soluciona el problema!
=> Parece que el código polyfill que se usa actualmente en /build/three.js no funciona bien. ¿Es posible reemplazar este código para futuras compilaciones?
¿Cambiaría el cheque por este?
if ( 'name' in Function.prototype === false ) {
O
if ( Function.prototype.hasOwnProperty( 'name' ) === false ) {
Confirmo que solo cambiar if
es suficiente.
if ( 'name' in Function.prototype === false ) {
es el camino a seguir!
Reparado. ¡Gracias!
Comentario más útil
Confirmo que solo cambiar
if
es suficiente.es el camino a seguir!