书中关于jQuery onclick绑定函数的使用【你所不知道的JS:this & Object Prototypes】

艾布拉姆

我对绑定函数的细节有疑问。这是示例:

// Parent class
function Widget(width, height) {
  this.width = width || 50;
  this.height = height || 50;
  this.$elem = null;
}

Widget.prototype.render = function($where) {
  if (this.$elem) {
    this.$elem.css({
      width: this.width + "px",
      height: this.height + "px"
    }).appendTo($where);
  }
};

// Child class
function Button(width, height, label) {
  // "super" constructor call
  Widget.call(this, width, height);
  this.label = label || "Default";
  this.$elem = $("<button>").text(this.label);
}

// make `Button` "inherit" from `Widget`
Button.prototype = Object.create(Widget.prototype);
// override base "inherited" `render(..)`
Button.prototype.render = function($where) {
  // "super" call
  Widget.prototype.render.call(this, $where);
  this.$elem.click(this.onClick.bind(this));
};

Button.prototype.onClick = function(evt) {
  console.log("Button '" + this.label + "' clicked!");
};

$(document).ready(function() {
  var $body = $(document.body);
  var btn1 = new Button(125, 30, "Hello");
  var btn2 = new Button(150, 40, "World");
  btn1.render($body);
  btn2.render($body);
});

上面的代码片段来自[你不知道JS:this & Object Prototypes]这本书,问题是代码:

this.$elem.click(this.onClick.bind(this));

既然$elem是赋值给button了,但是为什么this.onClick.bind(this)可以绑定到Button.prototype.onClick的click事件上。这个语法让我很困惑,有没有人知道确切的原因?

非常感谢。

吉拉德·阿齐

当您使用 jQuery 附加事件侦听器时,如下所示:this.$elem.click(...);jQuery 会自动将元素(在本例中为button元素)绑定到回调函数的上下文。换句话说,jQuery 使this事件处理程序中关键字引用触发事件的元素。

在您的情况下,onClick函数的代码(in Button.prototype) 期望this引用Button对象的当前实例,而不是 HTML 元素。因此,您必须使用bind-将正确的对象显式绑定到回调函数的上下文this.onClick.bind(this)

TL; 博士

如果您没有使用bindthis回调函数中关键字将引用被点击的button元素而不是Button对象实例。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

定义GL_GLEXT_PROTOTYPES与获取函数指针

来自分类Dev

gfortran -fc-prototypes选项用于函数指针

来自分类Dev

不知道要使用哪个JQuery插件

来自分类Dev

jQuery函数返回[Object Object]

来自分类Dev

关于Meyers的书中的operator =()

来自分类Dev

如何使用XSLT和jQuery在书中获得动态标题?

来自分类Dev

不知道我是否应该使用AppCompat,关于主题,栏等

来自分类Dev

使用 JQuery 返回 [object object] 的 Json URL

来自分类Dev

mysql表中的javascript多维数组-不知道什么样的Object Object

来自分类Dev

不知道如何与Gridster jQuery插件一起使用gridster.serialize()

来自分类Dev

使用jQuery在不知道其完整ID的情况下更改给定元素的属性

来自分类Dev

无法在Object Literal中使用jQuery函数

来自分类Dev

我不知道如何在 Angular2+ 中引用一个向 jQuery (floatThead) 添加函数的库

来自分类Dev

不知道在哪里放置Scripts.Render for JQuery

来自分类Dev

关于使用jQuery悬停方法时的关闭?

来自分类Dev

关于使用jQuery提交表单的问题

来自分类Dev

关于使用jQuery构建图像轮播的问题

来自分类Dev

JS“ for(arr中的var key)”>抛出了我自己的Array.prototypes,而不是固有的。为什么?

来自分类Dev

JS“ for(arr中的var key)”>抛出了我自己的Array.prototypes,而不是固有的。为什么?

来自分类Dev

是JQuery的新功能,不知道如何使用局部变量(与油脂猴子一起使用)

来自分类Dev

jQuery函数在连接字符串后返回[object Object]

来自分类Dev

jQuery函数在连接字符串后返回[object Object]

来自分类Dev

jQuery函数仅在首次单击时返回[object Object]

来自分类Dev

数组结构/语法(原来真正的q是关于类的,不知道该术语。)

来自分类Dev

关于C语言中的appendStringInfo-我不知道它是如何工作的

来自分类Dev

不知道函数的removeEventListener

来自分类Dev

jQuery:Div和变量使用.after()函数呈现为[Object object]

来自分类Dev

将Select Object传递给函数,然后使用jQuery处理

来自分类Dev

使用jQuery访问<object>中的DOM

Related 相关文章

  1. 1

    定义GL_GLEXT_PROTOTYPES与获取函数指针

  2. 2

    gfortran -fc-prototypes选项用于函数指针

  3. 3

    不知道要使用哪个JQuery插件

  4. 4

    jQuery函数返回[Object Object]

  5. 5

    关于Meyers的书中的operator =()

  6. 6

    如何使用XSLT和jQuery在书中获得动态标题?

  7. 7

    不知道我是否应该使用AppCompat,关于主题,栏等

  8. 8

    使用 JQuery 返回 [object object] 的 Json URL

  9. 9

    mysql表中的javascript多维数组-不知道什么样的Object Object

  10. 10

    不知道如何与Gridster jQuery插件一起使用gridster.serialize()

  11. 11

    使用jQuery在不知道其完整ID的情况下更改给定元素的属性

  12. 12

    无法在Object Literal中使用jQuery函数

  13. 13

    我不知道如何在 Angular2+ 中引用一个向 jQuery (floatThead) 添加函数的库

  14. 14

    不知道在哪里放置Scripts.Render for JQuery

  15. 15

    关于使用jQuery悬停方法时的关闭?

  16. 16

    关于使用jQuery提交表单的问题

  17. 17

    关于使用jQuery构建图像轮播的问题

  18. 18

    JS“ for(arr中的var key)”>抛出了我自己的Array.prototypes,而不是固有的。为什么?

  19. 19

    JS“ for(arr中的var key)”>抛出了我自己的Array.prototypes,而不是固有的。为什么?

  20. 20

    是JQuery的新功能,不知道如何使用局部变量(与油脂猴子一起使用)

  21. 21

    jQuery函数在连接字符串后返回[object Object]

  22. 22

    jQuery函数在连接字符串后返回[object Object]

  23. 23

    jQuery函数仅在首次单击时返回[object Object]

  24. 24

    数组结构/语法(原来真正的q是关于类的,不知道该术语。)

  25. 25

    关于C语言中的appendStringInfo-我不知道它是如何工作的

  26. 26

    不知道函数的removeEventListener

  27. 27

    jQuery:Div和变量使用.after()函数呈现为[Object object]

  28. 28

    将Select Object传递给函数,然后使用jQuery处理

  29. 29

    使用jQuery访问<object>中的DOM

热门标签

归档