Three.js: InternetExplorerのFunction.prototype.nameのバグ

作成日 2017年09月27日  ·  3コメント  ·  ソース: mrdoob/three.js

問題の説明

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で使用されているポリフィルコードがうまく機能していないようです。 将来のビルドのためにこのコードを置き換えることは可能ですか?

Three.jsバージョン
  • []開発
  • [x] r87
  • []..。
ブラウザ
  • []それらすべて
  • []クローム
  • [] Firefox
  • [x] Internet Explorer
OS
  • []それらすべて
  • [ ] ウィンドウズ
  • [x] macOS
  • [] Linux
  • [] Android
  • [] 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 評価