JavaScript对象难题

时间:2013-03-03 21:44:37

标签: javascript jquery object

我试图通过使用对象来改善我糟糕的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

        });
    }
}

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

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

2 个答案:

答案 0 :(得分:2)

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

testJS.somethingElse();

答案 1 :(得分: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行。对不起。