问题标签 [function-binding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
228 浏览

reactjs - 在 React 事件处理程序中使用 .bind() 时出错

我正在阅读 React 教程,但无法理解我为什么会遇到错误。

我正在尝试使用 React 添加此按钮元素:

<button onClick={this.add.bind(null, 'new item')}>New Item</button>

事件处理程序应该调用位于不同 React 类中的以下函数:

有人告诉我这不起作用,因为我“将 null 绑定到您的函数 this 值,并且在函数内部您正在访问 this 的属性,这会导致 typeError(可能:无法访问 null 或 sh 的属性状态。)”

但是,我不知道这意味着什么或如何解决问题。请帮忙。

下面是我的完整 codepen 项目和我正在使用的 youTube 教程(React JS 初学者教程 - 13 - TheNewBoston 创建新组件)的链接。

http://codepen.io/Daniel_Widrich/pen/yVaXXZ

https://www.youtube.com/watchv=OKRu7i49X54&index=13&list=PL6gx4Cwl9DGBuKtLgPR_zWYnrwv-JllpA

非常感谢您提前。这是我在 StackOverflow 上的第一个问题,我正在尝试接受基于该项目的学徒计划。任何反馈都非常感谢,我是一个大男孩,所以我可以处理批评。

-担

0 投票
1 回答
418 浏览

javascript - 如何将函数绑定为对象的属性

我有一个接受对象属性的函数,在这个对象中我想将一个函数作为属性之一传递。我想在调用属性时执行该函数。我需要绑定函数,因为 this 上下文在函数执行之前丢失。

我可以让函数表达式工作,但我无法获得第二种情况,我想将函数定义为属性单击的值。我该怎么做呢?

0 投票
1 回答
78 浏览

python - python3(lynux)中run()on/into函数的绑定/管道输出

我正在尝试使用run函数运行外部程序的输出。这个程序会定期抛出一行数据,我需要在我的脚本中使用这些数据我找到了一个子进程库并使用了它的run()/check_output()

示例:
def usual_process(): # some code here for i in subprocess.check_output(['foo','$$']): some_function(i)

现在假设 foo 已经在 PATH 变量中,并且它以半随机周期输出一个字符串。
我希望程序做自己的事情,并在some_function(i)每次 foo 向其输出发送新行时运行。

这归结为两个问题。将输出输送到 for 循环中并将其作为后台子进程运行 谢谢


更新:我已经设法使用This将 foo 输出到 some_function

根据this os.popen is to be deprecated,但我还没有弄清楚如何在python中管道内部进程现在只需要弄清楚如何在后台运行这个函数

0 投票
2 回答
1831 浏览

javascript - XMLHttpRequest 和绑定回调不起作用

我有一个简单的get函数使用XMLHttpRequest它接受一个回调参数。onload计划是在事件处理程序上调用回调。

这是一个简化版本:

回调函数有一个参数,data应该是来自 Ajax 调用的响应。

我有 2 个调用回调的版本:

  1. 版本 1 只是在事件处理函数内部调用回调。
  2. 版本 2 用于bind做同样的事情;this设置为xhr对象,而xhr.response作为参数发送。

当我使用版本 1 时,一切都按预期工作。当我使用版本 2 时,data参数为空。

我以为我知道XMLHttpRequest并且.bind()相当了解,但我无法弄清楚为什么第二个版本是空的。这里(不)发生了什么?

评论

感谢答案,我想我有它。

.bind()立即以 的当前值执行xhr.responseText,在这个阶段,它什么都不是。

如果我需要用未来值做出回应,似乎第一个版本更可取。

谢谢大家。

0 投票
4 回答
15876 浏览

javascript - 如何避免在渲染方法中绑定或内联箭头函数

我们应该避免在 render 中绑定方法,因为在重新渲染期间它会创建新方法而不是使用旧方法,这会影响性能。

所以对于这样的场景:

我们可以_handleChange在构造函数中绑定方法:

或者我们可以使用属性初始化语法

现在让我们考虑一下我们想要传递一些额外参数的情况,比如说在一个简单的待办事项应用程序中,点击项目我需要从数组中删除项目,因为我需要在每个项目中传递项目索引或待办事项名称onClick 方法:

现在只假设 todo 名称是唯一的。

根据文档

这种语法的问题是每次渲染组件时都会创建不同的回调。

问题:

如何避免这种在渲染方法中绑定的方式,或者有什么替代方法?

请提供任何参考或示例,谢谢。

0 投票
1 回答
256 浏览

react-native - setState 干扰绑定函数

我有一段工作代码。它在屏幕上显示 5 颗星,您可以单击它们来更改您对产品的评分。下面发布的代码有效。

但是,一旦我在我的 componentWillMount 中插入“this.loadInitialState()”函数,它就会中断,并给出一个似乎与另一个函数 _onRate() 的绑定有关的错误。

我不知道为什么这些是相关的,或者为什么一个会破坏另一个。我花了一段时间才弄清楚一个是另一个坏的原因。

我尝试了很多东西。包括以几种不同的方式绑定我的函数 _onRate,但这些都不能解决我的问题:

1.) 在 onPress 中使用粗箭头函数,例如:

2.) 不要使用胖箭头,而是在每个 onPress 中绑定,例如:

3.) 在构造函数中绑定,例如:

你对我如何继续探索这个有什么想法吗?

0 投票
2 回答
1539 浏览

java - Java:允许具有一个可变参数的函数和具有相同名称和一个相同类型参数的函数?

在准备 Java 认证考试时,我很惊讶地发现 Java 允许这样做:

这个类编译并运行良好。它会打印两次“Buying one object”。实际上我想看到一个编译器错误,因为这两个函数都可以使用。编译器如何在这里选择最佳匹配函数?当我只传递一个参数时,它是否总是选择非可变参数函数?

0 投票
1 回答
139 浏览

javascript - 广义咖喱 - Javascript

在阅读一篇关于在 Javascript 中实现通用 curry 的文章时,我偶然发现了这段代码。

我无法理解说明的部分内容

我们创建一个 fn 的副本,它绑定了前 k 个参数(部分应用),并将其作为下一个 fn 传递给 curry,其数量减少了 N - k。

在随后的调用中,arity 是如何fn减少到 Nk 的?具有 k 个参数的绑定函数应该具有 k 的元数对吗?

0 投票
1 回答
75 浏览

c++ - C ++将指向函数参数的指针更改为数组参数

我有一个带有数组的类,其大小在构造函数中指定。该类还存储了一个指向函数的指针,该函数将指针作为参数,调用时将设置为指向数组。我还有一个“绑定”函数,它将函数指针设置为等于作为参数传入的某个其他函数。这允许我绑定参数将包含数组的任意函数。它看起来像这样:

这一切都很好,但是使用数组(或任何容器类型)的重点是,从 MyClass 继承的类可以指定显式大小。然后,我计划(以某种方式)覆盖 bindFunc 函数以获取指向具有显式数量的单独参数的函数的指针,而不是指向具有参数数组的函数的指针。这只是为了清理语法并使派生类隐藏实现。它看起来像这样:

错误发生在fn = func因为 fn 是指向以数组(指针)作为参数的函数的指针,而 func 是指向以 2 个双精度为参数的函数的指针。这是我不知道如何解决的问题的症结所在。

当然,在这个片段中,我稍微精简了代码,只包含相关部分,并重命名了所有内容以更好地描述我的问题。如果有帮助,该类的最初目的是存储从 GLFW 的回调函数传入的状态信息。派生类应该分别保存滚动和鼠标位置信息(1 个元素用于滚动位置,2 个元素用于鼠标 X/Y 位置,因此数组的大小在派生类的构造函数中设置。)基类还具有计算其他事物的功能,例如任何其他可想象的变量输入类型都会发现有用的增量,因此是层次结构抽象。这一切都是为了简化输入处理,并且在使用时看起来像这样:

我不确定我想要的是否可能,但我有兴趣了解更多关于它或更正确的设计模式。我试过摆弄 <functional>函数,但我自己想不出任何东西。感觉语言会有一个特性可以让这样的事情成为可能,这就是为什么我想一开始就输入这个问题。

我在 C++ 中尝试的大部分内容都是为了学习,我知道我的方法对于我想要完成的事情可能有点疯狂,但希望它会导致成为一个更好的程序员。提前感谢您的洞察力!

0 投票
1 回答
117 浏览

javascript - JS:在无上下文函数调用中反弹“this”

此示例中的函数doSomethingElse无法执行,因为它this已被重新绑定到windowor global(如果在 Node 中)由于内部的无上下文调用app.populateDatabase

有没有办法在不引用app每个函数的情况下避免这种情况?

loadDatabase函数根据逻辑语句执行回调,如果虚构的数据库不存在,则在加载后填充它,然后populateDatabase执行已提供的回调。

我无法重新绑定onLoaded参数,app因为我不知道它来自哪里,并且绑定/应用/调用抽象过度使用造成了相当混乱。