zoukankan      html  css  js  c++  java
  • 方法中的函数会掩盖this,解决办法!

    要知道在javascript中this是种很神奇的东西,但是有时候也很淘气;

    如下:

    <script>
        var obj = {
            name: 'tqt',
            friends: ['shangs', 'lisi'],
            sayHello: function() {
                this.friends.forEach(function(friend){
                    console.log(this.name + ' say hello to ' + friend);
                });
            },
        }
        obj.sayHello();
        //say hello to shangs
        //say hello to lisi
    </script>

    此时this已经不再指向obj了所以不会有name属性;(this现在指向window,太淘气了!)

    对于这种情况解决办法如下:

    方法一: 

    <script>
        var obj = {
            name: 'tqt',
            friends: ['shangs', 'lisi'],
            sayHello: function() {
                var that = this;
                this.friends.forEach(function(friend){
                    console.log(that.name + ' say hello to ' + friend);
                });
            },
        }
        obj.sayHello();
        //tqt say hello to shangs
        //tqt say hello to lisi
    </script>

    方法二:

    <script>
        var obj = {
            name: 'tqt',
            friends: ['shangs', 'lisi'],
            sayHello: function() {
                this.friends.forEach(function(friend){
                    console.log(this.name + ' say hello to ' + friend);
                }.bind(this));
            },
        }
        obj.sayHello();
        //tqt say hello to shangs
        //tqt say hello to lisi
    </script>

    方法三:

    <script>
        var obj = {
            name: 'tqt',
            friends: ['shangs', 'lisi'],
            sayHello: function() {
                this.friends.forEach(function(friend){
                    console.log(this.name + ' say hello to ' + friend);
                }, this);
            },
        }
        obj.sayHello();
        //tqt say hello to shangs
        //tqt say hello to lisi
    </script>
  • 相关阅读:
    切片
    docker基础
    第18课 脚本练习二(找出文件下最大文件)
    第17课 脚本练习一(添加新用户)
    第十四课 脚本编程(重定向+变量)
    第十课 新建共享文件夹
    第九课 Linux文本处理
    第八课 正则表达式
    第七课 VI全屏文本编辑器
    第六课 Linux文件系统文本操作命令
  • 原文地址:https://www.cnblogs.com/tqt--0812/p/6880491.html
Copyright © 2011-2022 走看看