当前位置: 首页 > 网络应用技术

JavaScript中的老朋友:这是约束的

时间:2023-03-08 21:20:54 网络应用技术

  对象将在执行上下文中绑定。有时它与整体对象绑定,有时是某个对象,因此在什么情况下,它更加困惑,因此我计划编写本文以整理上下文。

  让我们谈谈结论:绑定取决于函数的直接调用位置。

  首先,您必须了解呼叫位置是什么:调用位置是在代码中调用函数的位置,而不是函数声明的位置。

  确定如何绑定,首先找到函数的呼叫位置,然后比较以下规则以查看哪个符合条件,并且这些规则具有不同的优先级。

  首先,最常用的函数调用类型是:独立函数调用。该规则可以视为不符合其他规则的默认规则。

  因为它不绑定到任何对象,所以默认情况下它与整体绑定。

  这种绑定仍然是独立函数的呼吁。

  但是,如果您使用它或处于严格的模式,则隐藏的绑定将丢失。

  第2条需要考虑的规则是上下文要求是否要求该立场,还是某个对象拥有或包含的。

  当它被称为时,其立足点指向对象。呼叫位置将使用上下文引用该函数,因此当调用函数时,它也可以称为函数“自己”或“ include”。

  当函数引用上下文时,隐藏的绑定规则将将函数中的函数绑定到此上下文对象,因此与其相同。

  对象属性的参考链仅是顶层(最后一层)会影响呼叫位置。

  固定绑定很容易丢失绑定对象。

  尽管下面的示例是参考,但实际上是引用函数本身。函数调用位置是它不绑定任何对象,因此默认情况下它是绑定的。

  当传输恢复功能发生时,会发生另一个损失,这还包括我们经常使用的时间

  回调功能的丢失非常普遍,甚至可以修改。

  隐式绑定的实现必须包含对象内部函数的属性,然后间接通过属性引用该函数。

  如果我们不想这样做怎么办?您可以使用明确的绑定。

  第一个参数是一个对象,当函数绑定到该对象时,它将指向此对象。

  如果我们希望始终在一个对象上显示函数,该怎么办?

  它可以通过硬结合来束缚。这种结合是一种明确的强制性结合。无论如何调用功能,其方向都不会被修改,因此称为硬绑定。

  obj = {a:5};

  var bar = function(){return foo.apply(obj,grigonments)}}

  var b = bar(3);// 5,3 Console.Log(b);// 8

  由于硬绑定非常普遍,因此ES5还提供了一个构建的方法

  var obj = {name:“来吧,绑定我”}

  var bar = foo.bind(obj);

  酒吧 ();//来绑我bar();//来绑我

  关键字很容易想到“类”,但是确切地说,其角色不是初始化类,并且不会立即实例化类。

  使用关键字调用该函数时,将执行以下操作:

  新绑定>显示绑定(绑定)> cisection绑定>默认绑定

  参考过程:参考:

  “您不知道的JavaScript”卷P91-95

  或者

  Coder的文章“通过前端访谈,了解此方向的这一点”

  (除了故事之外,他的文章的内容,例如,基本上来自上述书籍HH)

  当然,规则总是有例外。

  如果我们通过一个或传递在显示绑定中,则将忽略此显示绑定,并且将使用默认绑定:

  你为什么要通过一个?

  在某些情况下,我们需要使用数组或做某事。但是这两个功能需要传递到一个绑定的对象中,但是我们不在乎绑定,因此我们需要如此出色的位置。

  在另一种情况下,当创建函数时,将应用默认的绑定规则。

  分配分配时,最有可能发生间接参考:

  ES6中的箭头函数不使用上述四个绑定规则,它具有自己的想法。它将根据当前短语确定。具体来说,箭头函数将继承外呼叫的绑定(无论是什么绑定)。这与以前常用的机制一致。

  在内部创建的箭头函数将捕获呼叫。由于它是相应地绑定的,因此(参考箭头函数)也将受到绑定,并且无法修改硬绑定。

  箭头函数通常在回调函数中使用,例如计时器:

  该主题是从Coder的文章中获取的

  var person2 = {name:'person2'}

  person1.foo1();person1.foo1.call(person2);

  person1.foo2();person1.foo2.call(person2);

  person1.foo3()();person1.foo3.call(person2)();person1.foo3()。致电(person2);

  person1.foo4()();person1.foo4.call(person2)();person1.foo4()。致电(person2);

  原始:https://juejin.cn/post/709852399999344263205