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指向改变,成功获取外部数据
  • 相关阅读:
    分解质因数
    记忆化搜索
    BFS(广度优先搜索)
    DFS(深度优先搜索)
    A*算法
    最小生成树
    最近公共祖先(LCA)问题
    k短路算法
    次短路问题
    拓扑排序
  • 原文地址:https://www.cnblogs.com/webwangjie/p/14760394.html
Copyright © 2011-2022 走看看