zoukankan      html  css  js  c++  java
  • JavaScript嵌套函数this的重定向

    函数在嵌套后,this指向了内层的函数,导致无法获取外部定义的数据,也无法修改。

    看下面一段代码。

    var obj = {
        name: 'wang',
        friends: [ 'zhang', 'li' ],
        loop: function () {
            'use strict';
            this.friends.forEach(
                function (friend) {  
                    console.log(this.name+' knows '+friend);  
                }
            );
        }
    };
    obj.loop();//Cannot read property 'name' of undefined 找不到this
    

    如何重定向this让其重新指向外部,获取/修改外部数据,有三个方法:

    1:在进入嵌套函数前,将当前的this保存在一个变量中。

    var obj = {
        name: 'wang',
        friends: [ 'zhang', 'li' ],
        loop: function () {
            'use strict';
            var that = this ;
            this.friends.forEach(
                function (friend) {  
                    console.log(that.name+' knows '+friend);  
                }
            );
        }
    };
    obj.loop();//this指向改变,成功获取了外部数据
    

     2:使用.bind(this)改变this指向

    var obj = {
        name: 'wang',
        friends: [ 'zhang', 'li' ],
        loop: function () {
            'use strict';
            this.friends.forEach(
                function (friend) {  
                    console.log(this.name+' knows '+friend);  
                }.bind(this)
            );
        }
    };
    obj.loop();//this指向改变,成功获取外部数据

    3.使用callback改变this指向

    var obj = {
        name: 'wang',
        friends: ['zhang', 'li'],
        loop: function() {
            'use strict';
            this.friends.forEach(function(friend) {
                console.log(this.name + ' knows ' + friend);
            }, this);
        }
    };
    obj.loop();//this指向改变,成功获取外部数据
  • 相关阅读:
    Linux 添加环境变量
    postgresql 获取修改列的值
    5月30日周一上午
    周日5月29日
    2016年5月26日
    如何使用Gson(添加到项目里去)
    linux内核分析课程总结()待完善
    5月5日离散课笔记
    4月28日的离散课(还少了一部分)
    2016年4月29日
  • 原文地址:https://www.cnblogs.com/webwangjie/p/14760394.html
Copyright © 2011-2022 走看看