Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript对象本身的传递_Javascript_Jquery_Javascript Objects - Fatal编程技术网

Javascript对象本身的传递

Javascript对象本身的传递,javascript,jquery,javascript-objects,Javascript,Jquery,Javascript Objects,寻找一些真正快速的帮助 contactForm={ that: this, lilfield: 'I just equal this', fields: new Array("hc_name","hc_email","hc_telephone"), submit_button: jQuery("#hc_submit"), init: function(){ that.lilAlert(); }, lilAlert: func

寻找一些真正快速的帮助

contactForm={
    that: this,
    lilfield: 'I just equal this',
    fields: new Array("hc_name","hc_email","hc_telephone"),
    submit_button: jQuery("#hc_submit"),
    init: function(){
        that.lilAlert();
    },
    lilAlert: function(){
        alert("lets pump this out");
    }
}

上面只是一个例子,但实际上我试图实现的是,可以用于继续调用的变量,而不是引用对象“contactForm”本身。另外,这比这更安全一点,因为它会在事件上自动传递,例如使用jQuery单击等。

您将其过度复杂化;只要调用
this.lilAlert()
,只要在
contactForm
上调用
init()
,它就可以正常工作

contactForm.init(); // this will work;


你把它复杂化了;只要调用
this.lilAlert()
,只要在
contactForm
上调用
init()
,它就可以正常工作

contactForm.init(); // this will work;

两件事

  • 您的
    that
    指向创建contactForm的
    this
    ,而不是您期望的实际contactForm
  • 您的
    that
    是联系人表单的一个属性,因此您需要通过
    this.that
    contactForm.that
    访问它,这违反了最初的目的
  • 要么:

  • 引用形式本身
  • 或者在需要它的函数中定义

    init: function(){
        var that = this;
        that.lilalert();
    }
    

  • 如果您只想避免
    this
    欺骗,那么另一种方法是使用闭包(因此,通过
    this
    使用词汇、静态范围而不是动态绑定)

    两件事

  • 您的
    that
    指向创建contactForm的
    this
    ,而不是您期望的实际contactForm
  • 您的
    that
    是联系人表单的一个属性,因此您需要通过
    this.that
    contactForm.that
    访问它,这违反了最初的目的
  • 要么:

  • 引用形式本身
  • 或者在需要它的函数中定义

    init: function(){
        var that = this;
        that.lilalert();
    }
    

  • 如果您只想避免
    this
    欺骗,那么另一种方法是使用闭包(因此,通过
    this
    使用词汇、静态范围而不是动态绑定)


    从这个意义上讲,它确实工作得很好。但假设我做了这个,点击action:function(){this.lilAlert();},然后从jQuery绑定调用它,比如:jQuery(#element”).bind('click',contactForm.clickAction);现在我们将遇到问题,因为当从对象范围引用时,这将成为单击的元素而不是对象。@David;您所需要做的就是将其包装在一个匿名函数中,就像我对
    setTimeout
    示例所做的那样<代码>jQuery(“#元素”).bind('click',function(){contactForm.clickAction})从这个意义上讲,它确实工作得很好。但假设我做了这个,点击action:function(){this.lilAlert();},然后从jQuery绑定调用它,比如:jQuery(#element”).bind('click',contactForm.clickAction);现在我们将遇到问题,因为当从对象范围引用时,这将成为单击的元素而不是对象。@David;您所需要做的就是将其包装在一个匿名函数中,就像我对
    setTimeout
    示例所做的那样<代码>jQuery(“#元素”).bind('click',function(){contactForm.clickAction})你在找吗?你在找吗?嗯,所以实际上我想做的是不可能的?没有聪明的解决办法?嗯,所以实际上我想做的是不可能的?没有聪明的解决办法?