为什么 a.click(b.toggle) 不起作用?



jQuery中的点击函数定义为 .click( handler ),所以我为什么不能执行以下操作:

var object1 = $("#object1");
var object2 = $("#object2");
object1.click(object2.toggle);

但是,以下可行:

var object1 = $("#object1");
var object2 = $("#object2");
object1.click(function() { object2.toggle(); });

问题是,为什么我必须将功能处理程序封装在另一个函数中才能工作?我知道在第一个示例中,toggle函数将接收所有事件数据,但似乎不会影响其他功能,例如showhidefadeIn等)

更新:

关于参数,这似乎也有效:

var object1 = $("#object1");
var object2 = $("#object2");
object1.click(function(ev) { object2.toggle(ev); });

所以,无效的论点似乎不是问题。

答案:

对问题的解释是@seanwessell所说的,这是一个JSFIDDLE,以我更好地理解问题的方式显示了问题。不过,它与jQuery无关:https://jsfiddle.net/diegojancic/nffcnu8t/

这将不起作用,因为它将将处理程序分配给单击事件,为

function ( speed, easing, callback ) {
        return speed == null || typeof speed === "boolean" ?
            cssFn.apply( this, arguments ) :
            this.animate( genFx( name, true ), speed, easing, callback );
    }

当您尝试像object1.click(object2.toggle);一样分配处理程序时,它与此操作相同。

object1.click(
  function(speed, easing, callback) {
    return speed == null || typeof speed === "boolean" ?
      cssFn.apply(this, arguments) :
      console.log(this)
    this.animate(genFx(name, true), speed, easing, callback);
  }
);

处理程序在示例中不在乎对object2的引用。它将将切换函数作为jQuery定义,并将其分配为处理程序,但是不再链接。

分配像 object1.click(object2.toggle);的处理程序从object2.toggle中获取字面上的函数,并将其作为处理程序。这将与将一个对象的属性应用于另一个对象相同。

var obj1 =  {
"prop1":"obj1PropValue"
};
var obj2 = {
"prop1":"obj2PropValue"
}
obj1.prop1 = obj2.prop1;

即使OBJ2.Prop1是从OBJ1 javaScript分配的,并不在乎该物业来自哪个对象,只关心分配的值。同样的想法适用于JavaScript中的功能。

函数不过是属性值。值为关键字。

JavaScript是在简单的基于对象的范式上设计的。一个对象是 财产的集合,财产是 名称(或键)和值。属性的值可以是一个函数,在 在哪种情况下,该属性被称为方法。除了对象 在浏览器中预定义的,您可以定义自己的对象。 本章介绍了如何使用对象,属性,功能和 方法,以及如何创建自己的对象。

https://developer.mozilla.org/en-us/docs/web/javascript/guide/working_with_objects

它可以从语法的角度接受,但由于调用上下文没有正确执行。如果您以这种方式引用该函数(而不是包裹在通过元素调用的另一个功能中),则this绑定无法正确映射,因此代码不知道要切换什么。

相关内容

  • 没有找到相关文章

最新更新