1

browserifyを使用してjavascriptファイルから公開したオブジェクトを使用しようとしていますが、エラーが発生し続けますUncaught TypeError: undefined is not a function

次に例を示します。

foo.js:

var foo = function() {
  this.f1 = function(){
    console.log('function1')
  }
  this.f2 = function(){
    console.log('function2')
  }
};

module.exports = foo;

fooindex.html で使用しようとしています。

コマンドを入力した後:browserify foo.js > bundle.js

bundle.jshtmlファイルにインクルードします。

index.html:

<html>
  <head>
    <script src="./bundle.js"></script>
    <script>
      var foo = new foo();  // Uncaught TypeError: undefined is not a function

      foo.f1();
    </script>
  </head>

  <body>

  </body>
</html>

browserifyで何が間違っていますか? 前もって感謝します。


編集:間違った例について。

元の間違った例

foo.js:

var foo = {
  f1: function(){
    console.log('function1')
  },
  f2: function(){
    console.log('function2')
  }
};

module.exports = foo;
4

3 に答える 3

3

new を使用する場合は、次のように foo クラスを宣言する必要があります。

foo = function() {
  this.f1 = function(){
    console.log('function1')
  };
  this.f2 = function(){
    console.log('function2')
  };
};

foo_obj = new foo();
foo_obj.f1();
foo_obj.f2();

リテラルの代わりに。それ以外の場合は、単に foo オブジェクトのメソッド。

var foo = {
  f1: function(){
    console.log('function1')
  },
  f2: function(){
    console.log('function2')
  }
};

foo.f1();
foo.f2();

アップデート:

見てみましょう、私はbrowserifyを使用したことがありませんが、彼らのドキュメントに従って、次のようなことをする必要があります:

foo.js

module.exports = function() {
  this.f1 = function(){
    console.log('function1')
  },
  this.f2 = function(){
    console.log('function2')
  }
};

main.js

var foo = require('foo');

次に、次のようにします。

browserify main.js -o bundle.js

最後に bundle.js をインポートnew foo()し、スクリプト内にオブジェクトを作成するために使用します。

于 2014-02-12T02:16:39.420 に答える
1

オブジェクトを関数であるかのようにインスタンス化しようとしています。

new {}; // invalid!!
new function() {}; // valid!

どちらかを使用することをお勧めします

exports.foo1 = function() { console.log('foo'); }
exports.bar1 = function() { console.log('bar'); }

または、本当に使い続けたいnew foo()場合:

module.exports = foo;
function foo() {
    this.foo1 = function() { console.log('foo'); }
    this.bar1 = function() { console.log('bar'); }
}
于 2014-02-12T02:16:51.753 に答える
0
browserify foo.js --standalone foo > bundle.js
于 2014-02-12T02:51:09.547 に答える