我正在尝试创建ajax对象的原型。
我创建了这些功能:
$.extend({
ajax_prototype : function(parammeters){
instance = this;
instance.cache = false;
instance.crossDomain = false;
instance.dataType = 'json';
instance.timeout = 30000;
instance.error = default_error_function;
$.each(parammeters,function(key,value){
instance[key] = value;
});
},
set_ajax_action : function(template,action,func,def){
template[action] = func;
}
});
ajax_prototype
是对象的构造函数
设置一些默认设置,并根据每个需要定义一些默认设置。
set_ajax_action
设置要在每个事件上执行的功能。
当我创建这样的对象时:
temp1 = new $.ajax_prototype({
'type' : 'post',
'url' : 'controller.php',
});
我得到了这个对象:
Object { cache: false, crossDomain: false, dataType: "json", timeout: 30000, error: default_error_function(), type: "post", url: "controller.php", success: function () }
但是在我使用它之后:
$.set_ajax_action(temp1,'error',function(){console.log();});
对象变成这样:
Object { cache: false, crossDomain: false, dataType: "json", timeout: 30000, error: function (), type: "post", url: "controller.php", success: function () }
基本上他们的区别在于错误功能的设置方式。
这两个对象都很好用。
但是我想让原型用第二种形式创建对象。
有人可以解释一下为什么两个对象的差异以及如何解决我的问题?
编辑1
即使我从原型中删除了错误属性并调用$ .set_ajax_action(...),我也可以创建第二个对象。
我的问题是为什么功能演示与控制台有所不同。
我知道我的问题是微不足道的,无论哪种方式结果都是一样的,但我想知道它是如何工作的。
顺便说一下,即使我像这样设置了错误属性:
instance.error = function(){ ... };
结果将是:
Object { cache: false, ifModified: false, processData: true, crossDomain: false, dataType: "json", timeout: 30000, error: .ajax_prototype/instance.error(), url: "test" }
答案 0 :(得分:1)
控制台能够跟踪是否可以某种方式识别某个功能。例如,如果它具有名称或者已分配给变量,则控制台将显示其/变量的名称。如果它是在函数内创建的,控制台将显示它。例如:
(function testt(){
$.set_ajax_action(temp1,'error',function(){console.log();});
})()
console.log(temp1)
此代码将生成error: testt/<()
(firefox)。
您可以隐藏功能名称,而不是为默认处理程序指定名称。例如,像这样:
(function(default_error_function){
$.extend({
ajax_prototype : function(parammeters){
instance = this;
...
instance.error=default_error_function
...
},
set_ajax_action : ...
});
})(function() {/* default error handler */})
此处,default_error_function
符号的范围不是全局的,因此控制台不会显示它。同时,处理程序是在任何其他函数之外创建的,因此控制台只显示function ()
。