我已经知道了,apply
并且call
是类似的函数集this
(函数的上下文)。
区别在于我们发送参数的方式(手动vs数组)
题:
但是什么时候应该使用该 bind()
方法?
var obj = {
x: 81,
getX: function() {
return this.x;
}
};
alert(obj.getX.bind(obj)());
alert(obj.getX.call(obj));
alert(obj.getX.apply(obj));
.bind()
当你希望稍后在特定上下文中调用该函数时使用,该事件在事件中很有用。当你想立即调用该函数并修改上下文时,请使用.call()
或.apply()
。
调用/应用立即调用该函数,而bind返回一个函数,该函数在以后执行时将具有用于调用原始函数的正确上下文集。这样,你可以在异步回调和事件中维护上下文。
我经常这样做:
function MyObject(element) {
this.elm = element;
element.addEventListener('click', this.onClick.bind(this), false);
};
MyObject.prototype.onClick = function(e) {
var t=this; //do something with [t]...
//without bind the context of this function wouldn't be a MyObject
//instance as you would normally expect.
};
我在Node.js
中将它广泛用于异步回调,我想为其传递成员方法,但仍希望上下文成为启动异步操作的实例。
一个简单,简单的bind实现是:
Function.prototype.bind = function(ctx) {
var fn = this;
return function() {
fn.apply(ctx, arguments);
};
};
它还有更多的功能(就像传递其他args一样),但是你可以阅读更多有关它的内容,并查看MDN上的实际实现。
希望这可以帮助。
需要确认一些事情。以下代码: 将与以下相同: 右? 此外,接下来的另外两个问题是“我们有什么理由使用 ? 1) 有转换的大代码吗? 或 2)需要在其他地方重用lambda块?
问题内容: 我试图更好地理解在Angular中使用$ timeout服务作为一种“安全$ apply”方法的细微差别。基本上是在可能响应Angular事件或非Angular事件(例如jQuery或某些标准DOM事件)而运行一段代码的场景中。 据我了解: 在$ scope。$ apply中包装代码适用于您尚未处于摘要循环(又称为jQuery事件)的情况,但是如果正在进行摘要则将引发错误 在$ tim
问题内容: 继续,我有一个表代表一个父母身份的关系: 两个字段都是代表一个人的数字。 我需要将此表的不同人员作为一组,而不是将其作为孩子还是父母来导入。我首先想到的查询是最明显的查询: 但是一个波纹管似乎表现更好(至少在我的真实数据中): 我的问题是: 第二个查询真的比我一直建立的第一个查询快吗? 只是出于好奇,有没有更快的方法呢? 问题答案: 与第二个查询相比,第一个查询具有较高的IO成本和较低
本文向大家介绍JavaScript函数apply()和call()用法与异同分析,包括了JavaScript函数apply()和call()用法与异同分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了JavaScript函数apply()和call()用法与异同。分享给大家供大家参考,具体如下: JavaScript的函数是对象,因此有属性和方法。每个函数都包含两个属性:length和p
本文向大家介绍call和apply的区别?相关面试题,主要包含被问及call和apply的区别?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: apply:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.apply(A, arguments);即A对象应用B对象的方法。 call:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.call(A, args1,args2
本文向大家介绍javascript中call apply 与 bind方法详解,包括了javascript中call apply 与 bind方法详解的使用技巧和注意事项,需要的朋友参考一下 在JavaScript中,call、apply和bind是Function对象自带的三个方法,本文将通过几个场景的应用,来详细理解三个方法。 call() call() 方法在使用一个指定的this值和若干个