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指向改变,成功获取外部数据
  • 相关阅读:
    SQL关于分页的sql查询语句 limit 和row_number() OVER函数
    js的工作原理
    jQuery工作原理
    java servlet的工作原理
    JSP工作原理
    Ajax工作原理
    知识总结
    SQL Server Job 简单使用
    [转]基于fiddler的APP抓包及服务端模拟
    排序算法 python
  • 原文地址:https://www.cnblogs.com/webwangjie/p/14760394.html
Copyright © 2011-2022 走看看