美文网首页
浅谈this的四种绑定方式

浅谈this的四种绑定方式

作者: 追风的云月 | 来源:发表于2018-11-10 23:36 被阅读0次

再一次进行对this知识点的复习,每一次都是温故知新的过程。
这次对于this的学习基于《你所不知道的JavaScript》这本书,算是对于书中的知识做一个总结。

首先要明确的是一般情况下,this不是函数被定义时绑定,而是函数被调用时被绑定

那么函数中的this有四种绑定方式:

1. 默认绑定
直接调用函数,使用不带任何修饰的函数进行调用,只能使用默认绑定,无法应用其它规则,代码如下:
function foo() {
  console.log(this.a);
}
var a = 1;
foo() // 1
2. 隐式绑定
函数被调用时有上下文对象,那么this会绑定这个上下文对象,代码如下:
function foo() {
  console.log(this.a);
}
var obj = {
  a: 2,
  foo: foo
}
var a = 1;
obj.foo() // 2

其实不能讲foo这个函数属于obj对象,但是foo函数被调用时的落脚点的确是指向obj对象,当函数引用有上下文对象时,隐式绑定就会把函数调用中的this绑定到这个上下文对象;

对象属性引用链中只有最顶层或者说最后一层会影响调用位置

var foo = function () {
  console.log(this.a)
}
var obj2 = {
  a: 2
  foo: foo
}
var obj1 = {
  a: 1
  obj2: obj2
}
obj1.obj2.foo() // 2
隐式丢失

对于应用隐式绑定方式绑定this经常导致的一个情况是隐式丢失this

function foo() {
  console.log(this.a);
}
var obj = {
  a: 2,
  foo: foo
}
var bar = obj.foo;
var a = 'global';
bar() // 'global'

针对这种情况,虽然bar是obj.foo的一个引用,但是实际上它引用的是foo函数本身,此时bar()其实是一个不带任何修饰的函数调用,应用了默认绑定;

3. 硬绑定
使用call,apply或者bind,在调用函数的时候直接指定上下文对象,那么函数中的this会绑定到传入的对象,代码如下:
function foo() {
  console.log(this.a);
}
var obj = {
  a: 1
}
foo.apply(obj) // 1
4. new绑定
使用new调用某个构造函数,代码如下:
function Foo(a) {
  this.a = a;
  console.log(this.a);
}
var obj = new Foo(2);
console.log(obj.a) // 2

相关文章

  • this的四种绑定方式

    this有四种绑定方式,分别是默认绑定,隐式绑定,显示绑定和new绑定,四种绑定方式根据this不同的使用场景进行...

  • 浅谈this的四种绑定方式

    再一次进行对this知识点的复习,每一次都是温故知新的过程。这次对于this的学习基于《你所不知道的JavaScr...

  • React组件绑定this的四种方式

    React组件绑定this的四种方式[https://www.cnblogs.com/showcase/p/105...

  • js 继承

    js继承有四种方式 1. 构造函数绑定 使用call或apply方法,将父对象的构造函数绑定在子对象上,即在子对象...

  • this的绑定规则(四种)

    this 的四种绑定策略( 默认绑定、隐式绑定、显式绑定、new 绑定 ) 默认绑定:this 一般默认指向全局作...

  • 如何正确的判断this? 箭头函数的this是什么?

    this的绑定规则有四种:默认绑定,隐式绑定,显式绑定,new绑定 。 函数是否在 new 中调用(new绑定),...

  • jQuery绑定事件的四种方式

    jQuery中提供了四种事件监听方式,分别是bind、live、delegate、on,对应的解除监听的函数分别是...

  • jQuery绑定事件的四种方式

    此篇文章是在51edu.com上copy过来的,本来想注明作者的,但是没找到作者…… Query提供了多种绑定事件...

  • jQuery事件

    jquery 绑定事件 在1.7之前的版本中jQuery处理事件提供了四种事件监听方式,分别是bind、live、...

  • vue elementUI实现el-table点击行单选, 点击

    以下分别介绍这四种效果的实现方式,非常简单! 首先:table绑定点击行事件 @row-click="rowCli...

网友评论

      本文标题:浅谈this的四种绑定方式

      本文链接:https://www.haomeiwen.com/subject/uiytfqtx.html