0

オブジェクトを作成し、そのオブジェクトで初期化関数を呼び出そうとしています。ただし、初期化が定義されていません。これは私のコードです:

var SomeJSObj = function () {
    function Initialize() {
        $(document).ready(function () {
            alert('hello');
        });
    };
};

の新しいオブジェクトを作成してSomeJSObj呼び出すInitializeと、関数が定義されていません。誰でもエラーを追跡するのを手伝ってもらえますか?

4

5 に答える 5

1

あなたはこのように、シンプルで簡単な方法でそれを行うことができます。

var SomeJSObj = function () {
    this.Initialize=function() {
        $(document).ready(function () {
            alert('hello');
        });
    };

};

var x = new SomeJSObj();
x.Initialize()
于 2012-11-11T18:15:11.557 に答える
1

まず、関数定義の$(document).readyにある必要があります。

$(document.ready(function() {
    ...
});

問題は、プレフィックスを使用してオブジェクトでメソッドを定義する必要があることthis.です。

this.Initialize = function() {
    ...
};

つまり、全体として次のようになります。

$(document).ready(function() {

    var SomeJSObj = function () {

        this.Initialize = function() {
             alert('hello');
        };

    };

});

メソッドを呼び出すには、インスタンスを作成する必要があります。

var instance = new SomeJSObj(); // make sure this in in $(document).ready

メソッドを呼び出します。

instance.initialize(); // works
于 2012-11-11T18:07:14.120 に答える
1

Initialize関数を公開したいので、次のようにする必要があります。

var SomeJSObj = function () {
    this.Initialize = function() {
        $(document).ready(function () {
            alert('hello');
        });
    }
};

var t = new SomeJSObj();
t.Initialize();​
于 2012-11-11T18:03:04.140 に答える
1

Initialize現在、SomeJSObjコンストラクタの外ではアクセスできません。各インスタンスまたはプロトタイプで公開する必要があります。

var SomeJSObj = function () {
    this.Initialize = function () {
        $(document).ready(function () {
            alert('hello');
        });
    };
};

関数のコピーは、インスタンスごとに 1 つではなく、メモリ内に 1 つだけ存在する必要があるため、プロトタイプではより効率的です。

var SomeJSObj = function () {};
SomeJSObj.prototype.Initialize = function () {
    //Do stuff
};
于 2012-11-11T18:03:15.533 に答える
0

これはあなたが望むものです。フィドルを参照してください。

var SomeJSObj = function () {
    this.initialize();
};
SomeJSObj.prototype.initialize = function() {
  $(document).ready(function () {
      alert('hello');
  });
};
new ​SomeJSObj​();​
于 2012-11-11T18:04:01.923 に答える