es6箭头函数 this 指向问题

es5中 this 的指向

var factory = function(){
   this.a = ‘a‘;
   this.b = ‘b‘;
   this.c = {
        a:‘a+‘,
        b:function(){return this.a}
    }
};
console.log(new factory().c.b());  // a+

通过es5的语法调用,返回的是 a+ ,this 的指向是该函数被调用的对象,也就是说函数被调用的时候,这个 this 指向的是谁,哪个对象调用的这个函数,这个 this 就是谁。

es6中 箭头函数 this 的指向

var factory = function(){
   this.a = ‘a‘;
   this.b = ‘b‘;
   this.c = {
        a:‘a+‘,
        b:() => {return this.a}
    }
};
console.log(new factory().c.b());  // a

箭头函数函数体中 this 的指向是定义时 this 的指向。在定义 b 函数时,b当中的 this 指向的是 这个factory 函数体中的 this ,这个 factory 函数体中的 this 指向的是这个构造函数的实例,这个实例当中的 a 就等于 ‘a’;虽然是调用的b对象,但这个b对象指向的是这个实例。

箭头函数的this指向:箭头函数在定义时执行器上下文的this的指向(不具有块级作用域),即会取当前的函数的作用域链上的this,忽略块级作用域中的this

1.

var x=11;
var obj={
  x:22,
  say:function(){
    console.log(this.x)
  }
}
obj.say(); //22

一般的定义函数跟我们的理解是一样的,运行的时候决定this的指向,我们可以知道当运行obj.say()时候,this指向的是obj这个对象。

2.

var x=11;
var obj={
 x:22,
 say:()=>{
   console.log(this.x);
 }
}
obj.say();//11

es6箭头函数中的this是定义时绑定的,就是this是继承自父执行上下文!!中的this,比如这里的箭头函数中的this.x,箭头函数本身与say平级以key:value的形式,也就是箭头函数本身所在的对象为obj,而obj的父执行上下文就是window,因此这里的this.x实际上表示的是window.x,因此输出的是11。(this只有在函数被调用,或者通过构造函数new Object()的形式才会有this)

3.

var a=11
function test1(){
  this.a=22;
  let b=function(){
    console.log(this.a);
  };
  b();
}
var x=new test1();//11
var a=11
function test1(){
  this.a=22;
  let b=function(){
    console.log(this.a);
  };
  b();
}
test1();//22

箭头函数情况下:

var a=11;
function test2(){
  this.a=22;
  let b=()=>{console.log(this.a)}
  b();
}
var x=new test2();//22

ES6中定义的时候绑定this的具体含义,应该继承的是父执行上下文里面的this,切忌是父执行上下文!!!

简单对象(非函数)是没有执行上下文的!

箭头函数中,this指向的固定化,并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this。正是因为它没有this,所以也就不能用作构造函数。

原文地址:https://www.cnblogs.com/lingnweb/p/9882082.html

时间: 2024-11-05 14:45:47

es6箭头函数 this 指向问题的相关文章

ES6 箭头函数this指向

箭头函数有几个使用注意点. (1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象. (2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误. (3)不可以使用arguments对象,该对象在函数体内不存在.如果要用,可以用Rest参数代替. (4)不可以使用yield命令,因此箭头函数不能用作Generator函数. 上面四点中,第一点尤其值得注意.this对象的指向是可变的,但是在箭头函数中,它是固定的. function foo() { setTi

ES6箭头函数this指向

普通函数中的this: 1. this总是代表它的直接调用者(js的this是执行上下文), 例如 obj.func ,那么func中的this就是obj 2.在默认情况(非严格模式下,未使用 'use strict'),没找到直接调用者,则this指的是 window (约定俗成) 3.在严格模式下,没有直接调用者的函数中的this是 undefined 4.使用call,apply,bind(ES5新增)绑定的,this指的是 绑定的对象 箭头函数中的this 箭头函数没有自己的this,

js this 指向(es5)和es6箭头函数this指向问题总结(邹文丰版)

本文纯属自己结合网上文章总结,有问题和不同想法欢迎留言指正/********************简单小例子********************/ var test =function () { console.log(this); }; // test(); //window/*****************************2***********************************/ var test2 =function () { console.log(thi

ES6 中箭头函数 this 指向问题

在上一讲当中,我们知道了es5 中函数的 this 指向问题,即:指向直接调用它的那个对象.那么,在es6 中,箭头函数中的 this 指向是不是会有所不同呢?答案是必然的,今天我们就来聊聊箭头函数的this指向~ 首先来简单对比一下: [es5普通函数] // es5: var str = 'window' var obj = { str: 'obj', fn: function () { console.log(this.str) } } obj.fn() // obj [es6箭头函数]

es6箭头函数讲解

es6箭头函数的用法 箭头函数是es6的一种函数的简写方法. 如下: var f = v = > v; //等同于 var f = function(v){ return v; } var sum = (num1,num2) => num1+num2 ; //等同于 var sum = function(num1,num2){ return num1+num2 } [1,2,3].map(function (x) { return x * x; }); // 箭头函数写法 [1,2,3].ma

ES6 — 箭头函数

一 为什么要有箭头函数 我们在日常开发中,可能会需要写类似下面的代码 const Person = { 'name': 'little bear', 'age': 18, 'sayHello': function () { setInterval(function () { console.log('我叫' + this.name + '我今年' + this.age + '岁!') }, 1000) } } Person.sayHello() 上例的输出结果是什么呢?可能对javascript

Vue ES6箭头函数使用总结

Vue ES6箭头函数使用总结   by:授客 QQ:1033553122   箭头函数 ES6允许使用“箭头”(=>)定义函数: 函数不带参数 定义方法:函数名称 = () => 函数体 let func = () => 1 等同于 function func() { return 1; } 函数只带一个参数 定义方法: 函数名称 = 参数 => 函数体 或者 函数名称 = (参数) => 函数体   let func = state => state.count 等

ES6 -箭头函数 ,对象的函数解构

ES6 -箭头函数: //es6 中的箭头函数和扩展 //es5的写法 // function add(a,b){ // return a + b; // } // add(1,2); //3 function add1(a,b=1){ if(a==0){ throw new Error('a is zero'); } return a+b; } //console.log(add1(0)) //Uncaught Error: a is zero 主动抛出异常 //严谨模式 function a

ES6箭头函数中的this绑定问题

关于this指向问题的讨论一直是学习js不可忽视的重要部分,那些一个又一个围绕this挖的笔试坑,仿佛永远也填不完 var obj={ fn:function(){ console.log(this); } } obj.fn();//object 以上这段代码是再浅显不过的this指向问题,也就是谁调用的函数,函数体中的this就指向谁 再看下面这段 var obj={ fn:function(){ setTimeout(function(){ console.log(this); }); }