美文网首页
JS中的this指向问题

JS中的this指向问题

作者: 正义国王 | 来源:发表于2019-11-20 11:03 被阅读0次

1. this的几种绑定方法

(1)普通函数中的this指向函数的调用点

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

(2) call明确绑定

function foo() {
    console.log( this.a );
}

var obj = {
    a: 2
};

foo.call( obj ); // 2

(3)bind 硬绑定

function foo() {
    console.log( this.a);
}

var obj = {
    a: 2
};

var bar = foo.bind( obj );

bar(); //2

(4)new 绑定

function foo(a) {
    this.a = a;
}

var bar = new foo( 2 );   //this将指向bar
console.log( bar.a ); // 2

2. 箭头函数的 this

  • 箭头函数根本没有自己的this,其内部的this就是外层代码块的this
// ES6
function foo() {
  setTimeout(() => {
    console.log('id:', this.id);
  }, 100);
}

// ES5
function foo() {
  var _this = this;

  setTimeout(function () {
    console.log('id:', _this.id);
  }, 100);
}

也就是上例箭头函数中的 “this” 完全和 foo 中的this相同

  • 进一步验证
var handler = {
  id: "123456",

  init: ()=> {
    console.log(this.id);
  }
};
var id = 0;
handler.init();  //0

箭头函数中的 “this” 和 handler 中的this指向相同,所以将指向handler的调用点即全局作用域,自然this.id=0。但如果此处用的是匿名函数,那么按正常推导,其调用点是handler,那么this.id="123456"

参考:ES6箭头函数

相关文章

  • JS进阶篇-this指向问题

    JS中this的指向问题不同于其他语言,JS中的this不是指向定义它的位置,而是在哪里调用它就指向哪里。 JS中...

  • js中this指向问题

    this的指向在函数定义的时候是无法确定的,只有函数执行的时候才能确定this到底指向谁,实际this指向是调用他...

  • JS中this指向问题

    首先声明,添加删除线的都是不太确定的 下面我们分情况解释: 1、函数调用模式--当一个函数并非一个对象的属性时,那...

  • js中this指向问题?

    This是一个关键字,它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。 this 是在函数被调用时确...

  • js中this的指向问题

    this是Javascript语言的一个关键字它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用,下面分...

  • js 中 this 的指向问题

  • JS中的this指向问题

    1. this的几种绑定方法 (1)普通函数中的this指向函数的调用点 (2) call明确绑定 (3)bind...

  • JS 中的 this指向问题

    程序员就是没有人情味的原始人,不懂交际。谈不到对象。每天就是查看a-z,0-9加上!@#¥%…/&()+-=/<>...

  • js中的this指向问题

    只要记住这句话,谁调用的就指向谁,既调用函数所处的父层 window 对象 此时的this=>foo,如果改成这样...

  • JS中的this指向问题

    this是我们日常最经常使用的语法之一。通过这篇文章分析一下this的指向问题。说到this就一分为二来看(ES6...

网友评论

      本文标题:JS中的this指向问题

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