闭包中的this

来源:互联网 发布:淘宝加入放心淘的条件 编辑:程序博客网 时间:2024/05/09 09:47

在不使用闭包的情况下

  • this指向的调用该函数的对象
var name = "小刚";var obj = {    name:"小明",    fn:function () {        console.log(this.name,this);    }}obj.fn() // 小明  obj

闭包函数中this的指向

  • 在使用了闭包的情况下,this会丢失自己原本的指向
  • 下面的例子中this 实际上是指向的window
var name = "小刚";var obj = {    name:"小明",    fn:function () {          return function () {            console.log(this.name);        }    }}
obj.fn()()  // 小刚 window

如何修改闭包函数中 this 的指向

1. 使用一个变量保存 当前 this(简单易懂的方法)

    var name = "小刚";    var obj = {        name:"小明",        fn:function () {            var that = this ;               return function () {                console.log(that.name);            }        }    }
obj.fn()() // 小明

2. 使用 call 或 apply方法

 var obj = {    name: "小明",    fn: function() {        var foo = function() {            console.log(this.name);        }        foo.call(this)        return foo    }}
obj.fn()() // 小明

3. 使用 bind 方法

var obj = {    name: "小明",    fn: function() {        return function() {            console.log(this.name);        }.bind(this)    }}
obj.fn()() // 小明

4. 使用ES6的箭头函数
- 箭头函数中的this完全使用了一套新的规则

var obj = {    name: "小明",    fn: function() {        return () => {            console.log(this.name)        }    }}
obj.fn()()  // 小明
原创粉丝点击