zoukankan      html  css  js  c++  java
  • this对象-未完

    下面的实例,只是基于是用this

    在闭包中使用this对象可能会导致一些问题,因为 this对象是在运行时基于函数的执行环境进行绑定的:全局函数中,this等于window,当函数被特定于某个对象进行调用时,this代表调用的对象。但是匿名函数的执行环境具有全局性,所以匿名函数中this通常指定为window。

    例如:

    var name="The Window";
    
            var object = {
    
                name: "My Object",
    
                getNameFunc: function () {
    
                    return function () {
    
                        return this.name;
    
                    };
    
                }
    
            };
    
            alert(object.getNameFunc()()); //执行结果The Window

    上面的代码中,使用this对象进行返回,返回的是全局变量name的值,因为函数在被调用时,都会取得两个特殊变量,this和arguments,内部函数在用this进行搜索时,只会搜索到其活动对象为止,因此使用this永远不可能搜索到外部函数的变量。

    不使用this不会出现这种情况

    再例如:

     

    var name = 1;
    
            function parentFunc() {
    
                var name = 6;
    
                return function () {
    
                    this.name++;
    
                    return this.name;
    
                }
    
     
    
            }
    
            var fun = parentFunc();
    
         
    
            alert(fun());// name前面用this 返回的值是2,不加this,返回的是7
    
            alert(fun());// name前面用this 返回的值是3,不加this,返回的是8
    
            alert(fun());// name前面用this 返回的值是4,不加this,返回的是9 因为产生了闭包,所有不加this的name可以看做为内部的静态变量

    上面的代码体现了用this和不用this 的区别,用this只是指定当前的return函数的作用域加上全局作用域。而不使用,则可以直接访问外部作用域。

    如果解决这种问题,可以在返回函数的上方将外部作用域指定给一个变量,如:

    var name="The Window";
    
            var object = {
    
                name: "My Object",
    
              
    
                getNameFunc: function () {
    
                    var that = this;
    
                    return function () {
    
                        return that.name;
    
                    };
    
                }
    
            };
    
            alert(object.getNameFunc()()); //My Object
  • 相关阅读:
    asp.net中合并DataGrid行
    将Asp.Net页面输出到EXCEL里去····
    清空Sql数据库日志等操作
    opengl 教程(14) 摄像机控制(1)
    awk使用技巧
    opengl 教程(10) index draw
    opengl 教程(12) 投影矩阵
    opengl 教程(9) 顶点属性插值
    opengl 教程(15) 摄像机控制(2)
    opengl 教程(11) 平移/旋转/缩放
  • 原文地址:https://www.cnblogs.com/y8932809/p/5395549.html
Copyright © 2011-2022 走看看