我试图通过使用对象来改善我糟糕的JavaScript技能,而不仅仅是使用全局变量和随机函数集。我的PHP框架到现在为任何给定(一组)页面使用了两个文件...... functions.js
和ajax.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
函数?它似乎应该可用。
答案 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
行。对不起。