当前位置: 首页 > 面试题库 >

JavaScript call()和apply()与bind()?

丁弘新
2023-03-14
问题内容

我已经知道了,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值和若干个