JQuery原型设计函数

时间:2015-09-15 23:06:24

标签: javascript jquery function

我正在尝试创建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" }

1 个答案:

答案 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 ()