Aurelia-CLIプロジェクトでTHREEを使用しています。 これは、モジュールとRequireJSを使用してロードされることを意味します。 Internet Explorer(IE 11でテスト済み)を除いて、すべて正常に動作します。
壊れたコードは、 / build / three.jsファイルの次のコードです(上部のポリフィルセクションの42〜57行目)。
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;
}
});
}
そしてそれは問題を修正します!
=>現在/build/three.jsで使用されているポリフィルコードがうまく機能していないようです。 将来のビルドのためにこのコードを置き換えることは可能ですか?
チェックをこれに変更すると、違いが生じますか?
if ( 'name' in Function.prototype === false ) {
または
if ( Function.prototype.hasOwnProperty( 'name' ) === false ) {
if
変更するだけで十分であることを確認しました。
if ( 'name' in Function.prototype === false ) {
それは行く方法です!
修繕。 ありがとう!
最も参考になるコメント
if
変更するだけで十分であることを確認しました。それは行く方法です!