50

file1.jsでクラスを定義するとします。

function Customer(){
    this.name="Jhon";
    this.getName=function(){
        return this.name;
    };
};

ここで、file2.jsにCustomerオブジェクトを作成する場合

var customer=new Customer();
var name=customer.getName();

例外が発生しています:Customer is undefined, not a constructor.

しかし、file2.jsで顧客オブジェクトを作成し、それをfile1.jsに渡すと、動作します。

file1.js

    function Customer(){
        this.name="Jhon";
        this.getName=function(){
            return this.name;
        }
    }
    function customer(){
        return new Customer();
    }

file2.js

    var customer=customer();
    var name=customer.getName();

しかし、new Customer()を使用してfile1.jsにcustomerオブジェクトを作成したいと思います。どうすればそれを達成できますか?

4

7 に答える 7

37

実行している環境によって異なります。Web ブラウザーでは、file1.js前にロードされていることを確認する必要がありfile2.jsます。

<script src="file1.js"></script>
<script src="file2.js"></script>

node.js で推奨される方法は、file1 をモジュールrequireにして、関数でロードできるようにすることです。

require('path/to/file1.js');

require.jsライブラリを使用して、ノードのモジュール スタイルを HTML で使用することもできます。

于 2012-10-10T06:01:11.560 に答える
4

file2でコードを実行する前に、domがロードされていることを確認してください... jQueryを使用している場合:

$(function(){
  var customer=customer();
  var name=customer.getName();
});

その場合、ファイルの順序は関係ありません。すべてのファイルがロードされるまで、コードは実行されません。

于 2012-10-10T06:04:33.880 に答える
4

HTML で JavaScript を使用している場合は、HTML内にfile1.jsおよびを含める必要があります。file2.js

<script src="path_to/file1.js"></script>
<script src="path_to/file2.js"></script>

file1の前に最初に来る必要があることに注意してくださいfile2

于 2012-10-10T05:59:13.983 に答える
2

それを機能させるための可能な提案:

this.getName=function(){...}いくつかの変更 (U は、あるべきステートメントにセミコロンを含めるのを忘れていましたthis.getName=function(){...};)

function Customer(){
this.name="Jhon";
this.getName=function(){
return this.name;
};
}

(これは問題の 1 つかもしれません。)

JS ファイルが正しい順序で U リンクされていることを確認してください

<script src="file1.js" type="text/javascript"></script>
<script src="file2.js" type="text/javascript"></script>
于 2012-10-10T05:59:34.387 に答える