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

 本文纯属自己结合网上文章总结,有问题和不同想法欢迎留言指正/********************简单小例子********************/     var test =function () {        console.log(this);    };    // test(); //window/*****************************2***********************************/    var test2 =function () {        console.log(this);        return function () {            console.log(this)        }    };    var bb={        a:‘1‘,        cc:test2 //赋值类型还未执行    };    // bb.cc()(); // 1.obj  2.window    /*****************************3***********************************/    var test3 =function () {        console.log(this);        return function () {            console.log(this)        }    };    var bb3={        a:‘1‘,        cc:test3() //默认在最外层执行    };    bb3.cc(); // 1.window  2.obj

//test2 tes3 只是一个括号的差别,决定指向的调用者;

/************普通函数例子*****************/    var obj = {        birth: 1990,        getAge: function () {            var b = this.birth;            var that=this;            console.log(this);  //this指向obj            return function () {                console.log(that);//that缓存保留在指向obj                console.log(this);  //this指向window  最终的调用者不是obj而是window;            };        }    };    // obj.getAge()();//直接指向调用者“obj.getAge()”执行后就变成“()”而“()直接在最外层window上”

/************箭头函数登入*****************/    var obj2 = {        name:‘obj2‘,        birth: 1990,        getAge: function () {            var b = this.birth; // 1990            return () => {                var c=‘hehe‘;                console.log(this);//obj2                return () => {                    console.log(this) //obj2 箭头函数this始终指向最外层obj2;                }            }        }    };    // obj2.getAge()()();

//结合两个例子箭头函数的设计更加合理的,this始终保持指向定义时候的obj2,传统的函数在这种情况就直接指向window,// 个人感觉有点不合理,

/*************************普通构造函数***************************************/function Fn(name,age){    this.name=name;    this.age=age;    console.log(this); //通过new一个实例之后this指向会指向这个对象    return function () {        console.log(this)  //最终执行调用的还是window;不是new出来的对象    };}    // var obj=new Fn(‘张飞‘,‘14‘); //this Fn    // obj(); //this window

/*******************箭头构造函数*********************************************/    function Fn2(name,age){        this.name=name;        this.age=age;        console.log(this); //obj2        return () => {            console.log(this) //obj2            return () => {                console.log(this) //obj2            }        }    }    // var obj2=new Fn2(‘张飞‘,‘14‘); //this指向obj2    // obj2(); //this指向obj2

// Fn2()()();//如果构造函数直接当做普通函数来执行,那么全部指向最初的window

//通过对比可以发现总结一下箭头函数很好的解决了this原来在函数内部指向不合理的情况。你只要记住箭头函数会继承最初    //最外层定义的this

原文地址:https://www.cnblogs.com/zou1234/p/8729082.html

时间: 2024-09-30 04:26:45

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

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指向

箭头函数有几个使用注意点. (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,

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箭头函数中的this

简要介绍:箭头函数中的this,指向与一般function定义的函数不同,箭头函数this的定义:箭头函数中的this是在定义函数的时候绑定,而不是在执行函数的时候绑定. (1)一般函数this指向在执行是绑定  当运行obj.say()时候,this指向的是obj这个对象. var x=11; var obj={ x:22, say:function(){ console.log(this.x) } } obj.say(); //console.log输出的是22 (2)所谓的定义时候绑定,就

ES6 — 箭头函数

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

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

Vue ES6箭头函数使用总结

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