此博客是本人从学生时代开始做笔记所用, 部分是工作所遇问题,做填坑笔记,部分闲来查阅资料,加上自己的理解所总结的学习笔记, 常忙得不可开交,若漏了资料来源,望通知~ 前路漫漫,写点东西告诉自己正在一点点进步,而不要迷失于繁忙。

this指向 一般函数与箭头函数

es6对象内函数一般有两种写法:

var person1 = {
    name: "p1",
    sayThis() {
        console.log(this);
    }
};

var person2 = {
    name: "p2",
    sayThis:()=> {
        console.log(this);
    }
};

person1.sayThis()
person2.sayThis()

输出:

person1的写法,类似于:

var person1 = {
    name: "p1",
    sayThis: function() {
        console.log(this);
    }
};

this指向当前调用此方法的对象

 

person2的写法,使用了箭头函数,箭头函数的this指向当前的执行环境(创建它时所处的上下文)(箭头函数可以捕获其所在上下文的this值),这里当然是window对象,箭头函数并没有自己的this值,它的this继承自外围作用域

 

function Person() {  
    this.age = 0;  
    setInterval(() => {
        // 回调里面的 `this` 变量就指向了期望的那个对象了
        this.age++;
    }, 3000);
}

var p = new Person();

 

备注:call,apply,bind对es6中的this,无效

 

var objProject = this;
var foo = (() => this);
console.log(foo());  // window
console.log(objProject);  // window
console.log(foo() === objProject ); // true
// 作为对象的一个方法调用
var obj = {foo: foo};
console.log(obj.foo() === objProject ); // true
// 尝试使用call来设定this
console.log(foo.call(obj) === objProject ); // true
// 尝试使用bind来设定this
foo = foo.bind(obj);
console.log(foo() === objProject ); // true

 

posted @ 2017-10-10 14:14  炎泽  阅读(3786)  评论(0编辑  收藏  举报