1

我试图通过使用对象来提高我糟糕的 JavaScript 技能,而不仅仅是使用全局变量和随机函数集。到目前为止,我的 PHP 框架对任何给定的(一组)页面都使用了两个文件......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

        });
    }
}

我的问题似乎很愚蠢......

如何somethingElseajax对象调用(如果可以)函数?似乎它应该可用。

4

2 回答 2

2

由于您只有一个对象实例,您可以只使用包含该实例的全局变量:

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 回答