1

グローバル変数やランダムな関数セットを使用するだけでなく、オブジェクトを使用して、ひどいJavaScriptスキルを向上させようとしています。これまでの私のPHPフレームワークは、任意の(セットの)ページに2つのファイルを使用していました...functions.jsajax.js。分離を維持したいのですが、オブジェクトを使用して同じ結果を達成します。

オブジェクトがある場合...

var testJS = {

    init: function(options) {
        var defaultSettings = {
            someOption: false,
            fadeLogo: false
        },

        settings = $.extend({}, this.defaultSettings, options),

        base = this;

        // call ajax function...
        ajax.doSomething();

    },

    somethingElse: function() {
        // whatever
    }
});

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

そして、ajaxオブジェクトを作成します...

var ajax = {
    doSomething: function(some_var) {
        $.post("Ajax.class.php", {"mode": 'doSomething', 'some_var': some_var}, function(data) {
            something = $.parseJSON(data);
            $('#someId').html(something);

            // call somethingElse function from testJS

        });
    }
}

私の質問は本当にばかげているようです...

オブジェクトsomethingElseから関数を呼び出すにはどうすればよいですか(可能な場合) 。ajax利用できるはずのようです。

4

2 に答える 2

2

オブジェクトのインスタンスは1つしかないため、そのインスタンスを含むグローバル変数を使用できます。

testJS.somethingElse();
于 2013-03-03T21:51:36.217 に答える
1

オブジェクトだけでなく、新しいクラスを作成したいと思います。次に、コールバックtestJS内に新しいオブジェクトを作成できます。ajax

function testJS() {
        this.init = function(options) {
            var defaultSettings = {
                    someOption: false,
                    fadeLogo: false
            };

            this.settings = $.extend({}, this.defaultSettings, options);

            var base = this;

            // call ajax function...
            ajax.doSomething();

        };

        this.somethingElse = function() {
            // whatever
        };
}

次に、ajaxコールバック内で:

var myTestJS = new testJS({ /* Your options here */ });
myTestJS.somethingElse();

このオブジェクトのコンストラクターはまだグローバルですが、オブジェクト自体はコールバックのスコープ内にのみ存在するため、これは他の回答よりも気に入っています。グローバルな動作が必要な場合でも、この方法を使用できます。コールバックの外でコンストラクターを呼び出すだけです。

編集

init上記の関数を定義した方法では、base変数は何もできなくなります。私はそれを次のように宣言する必要があります:

function testJS() {
    var base = this;
    ...

var base = this;次に、内部の行を削除しinitます。申し訳ありません。

于 2013-03-03T21:57:25.423 に答える