【问题标题】:jQuery Javascript pass parent object as thisjQuery Javascript 以此方式传递父对象
【发布时间】:2012-01-23 03:43:56
【问题描述】:

我想将当前调用的对象及其当前设置的参数传递给闭包函数。我一般不知道怎么做,但是我认为 jQuery 又增加了一层混乱,因为 this 指的是一个元素。

例子:

jQuery 插件

(function( $ ){
  $.fn.addContentType = function(obj) {
    var name = "this is just an example";
    obj.func.call(this); //<--I want to pass this object, not the jQuery selector   
  };
})( jQuery );

调用插件

jQuery("#someelement").addContentType({
  func:function(){
    console.log(this.name); //<--Expect "this is just an example"
  }
});

任何想法如何做到这一点?

这只是一个例子,并没有做任何事情,我只是想展示我所追求的。如果我缺少详细信息,请告诉我。

【问题讨论】:

  • 无法获取局部变量。
  • name 只是addContentType 中的一个局部变量。另一方面,this 指的是jQuery("#someelement") 选择的所有元素。因此,this.namejQuery("#someelement").name 相同。
  • @Felix:正确。我一开始就提到了。我在问是否有办法传递一个引用对象本身的“this”
  • 你指的是哪个对象?选定的元素?还是 jQuery 对象?如果选择了多个元素怎么办?

标签: javascript jquery object closures


【解决方案1】:

要访问 name 作为 jQuery 对象的属性,您需要添加它而不是使用变量。

this.name = "this is just an example";
obj.func.call(this);

或者使用变量将值传递给函数:

var name = "this is just an example";
obj.func.call(this, name);

并在另一端接收它:

func:function( name ){
   console.log( name ); //<--Expect "this is just an example"
}

或者使您的obj 成为this 值,请执行以下操作:

obj.func.call(obj, name);

...但您仍然需要传递参数,除非您将值作为属性分配给obj

【讨论】:

    【解决方案2】:

    你可以像这样从 jQuery 选择器中获取 DOM 元素:

    $("#elem").get(0);
    

    $("#elem")[0];
    

    Read this 获取详细信息(如果需要)

    【讨论】:

      【解决方案3】:

      您可以使用.apply() 来传递原始函数调用的上下文和参数:

      obj.func.apply(this, arguments);
      

      MDN reference 用于 .apply()MDN reference 用于 arguments 对象。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-25
        • 1970-01-01
        • 1970-01-01
        • 2011-07-23
        相关资源
        最近更新 更多