ECMA Javascript中这有什么用

  介绍

这篇文章给大家分享的是有关ECMA Javascript中这有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。

这实际上是在函数被调用时发生的绑定,它指向什么完全取决于函数的调用位置(也就是函数的调用方法)。

<强>四条规则:(你不知道的JS)

<强> 1。默认绑定

函数foo () {   控制台。日志(这。一个);   }   var=2;   foo ();//2

无论是否在严格模式下,在全局执行上下文中(在任何函数体外部)这都指代全局对象。(MDN)
在严格模式下,这将保持他进入执行上下文时的值,如果这没有被执行上下文(执行上下文)定义,那它将保持为定义。(MDN)

函数foo () {   “使用strict";   控制台。日志(这。一个);   }   var=2;   foo ();//TypeError:这是未定义的

2。隐式绑定/丢失

当函数作为对象里的方法被调用时,它们的这是调用该函数的对象,且绑定只受最靠近的成员引用的影响。(MDN)

//隐式绑定   函数foo () {   控制台。日志(这。一个);   }   var methoda={   答:42岁   foo: foo   };   var其中obj1={   2,   methoda: methoda   };   obj1.obj2.foo ();//42 //隐式丢失   函数foo () {   控制台。日志(这。一个);   }   函数doFoo (fn) {//fn其实引用的是foo   fn ();//& lt;——调用位置!   }   var obj={   2,   foo: foo   };   var=?哦,global";//一个是全局对象的属性   doFoo (obj。foo);//鞍パ?global"

3。显示绑定

如果要想把它的值从一个上下文传到另一个,就要用电话或者应用方法。(MDN)
调用f.bind (someObject)会创建一个与f具有相同函数体和作用域的函数,但是在这个新函数中,这将永久地被绑定到了绑定的第一个参数,无论这个函数是如何被调用的。

var obj={   数:0,   酷:函数coolFn () {   如果这一点。数& lt;1){   setTimeout(函数计时器(){   this.count + +;//这是安全的//因为绑定(. .)   控制台。日志(“更awesome");   }。bind (), 100);//看,bind () !   }   }   };   obj.cool ();//更酷了。

硬绑定

创建一个包裹函数,传入所有的参数并返回接收到的所有值。
硬绑定会大大降低函数的灵活性,使用硬绑定之后就无法使用隐式绑定或者显式绑定来修改。

//简单的辅助绑定函数   函数bind (fn、obj) {   返回函数(){   返回fn。应用(obj,参数);   };   }

软绑定

给默认绑定指定一个全局对象和未定义以外的值,那就可以实现和硬绑定相同的效果,同时保留隐式绑定或者显式绑定修改这个的能力。

Function.prototype。softBind=函数(obj) {   var fn=;   var咖喱=[].slice。调用(参数,1);//捕获所有咖喱参数   var约束=function () {   返回fn.apply (   (!这| |===(窗口| |全球))?obj:这   curried.concat。应用(咖喱,参数)   );   };   绑定。原型=对象。创建(fn。原型);   返回绑定;   };

4。新绑定

当一个函数用作构造函数时(使用新关键字),它的这个被绑定到正在构造的新对象。(MDN)
使用新的来调用函数,或者说发生构造函数调用时,会自动执行下面的操作(你不知道的JS)

<李>

创建(或者说构造)一个全新的对象。

<李>

这个新对象会被执行[[原型]]连接。

<李>

这个新对象会绑定到函数调用的。

<李>

如果函数没有返回其他对象,那么新表达式中的函数调用会自动返回这个新对象。

函数foo () {   这一点。一个=;   }   var酒吧=new foo (2);   控制台。日志(酒吧。一个);//2

<强>四条规则优先级

新绑定比;,显式绑定比;隐式绑定比;默认绑定

<李>

函数是否在新中调用(新绑定)?如果是的话这绑定的是新创建的对象。

var酒吧=new foo () <李>

函数是否通过电话,申请(显式绑定)或者硬绑定调用?如果是的话,这绑定的是指定的对象。
<强>另外:强如果绑定null或者定义,实际应用的是默认绑定规则。

ECMA Javascript中这有什么用