2019-06-04

如何正确的了解this对象

—— this对象是在运行时基于函数的执行环境绑定的,在全局函数中,this 等于window,而当函数作为某个对象的方法调用时,this等于那个队象,不过,匿名函数的执行环境具有全局性,因此其this对象通常指向window.请看下边例子
 var name = ' this Window  ';//创建全局变量
        // 创建一个包含name属性的对象
        var object = {
            name: " My Object ",
            // 返回一个匿名函数
            getNameFunction: function () {
                return function () {
                    return this.name;
                }
            }
        }
        // 立即调用返回的函数
        alert(object.getNameFunction()());//"this window"(在非严格模式下);
——每个函数在调用时都会自动取得两个特殊变量:this 和 arguments。内部函数在搜索这两个变量时,直到搜索到其活动对象为止;因此其永远不能直接访问外部函数中的两个变量,但是,把外部作用域中的this对象保存在一个闭包能够访问到变量里,就可以让闭包访问该对象了;
 var name = ' this Window  ';//创建全局变量
        // 创建一个包含name属性的对象
        var object = {
            name: " My Object ",
            // 返回一个匿名函数
            getNameFunction: function () {
                return function () {
                    var that = this;//将this对象赋值给了that;
                    return this.name;
                }
            }
        }
        // 立即调用返回的函数
        alert(object.getNameFunction()());//" My Object""

在几种特殊的情况下,this的值可能会发生改变。比如下边例子:
 var name = ' this Window  ';//创建全局变量
        // 创建一个包含name属性的对象
        var object = {
            name: " My Object ",
            // 返回一个匿名函数
            getName: function () {
                   return this.name;
            }
        }
这里的getName()方法只是简单的返回了this.name的值,下面就是调用object.getName()的方式及结果:
object.getName();                    // "My Object"
(object.getName)();                    // "My Object"
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,162评论 0 21
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,315评论 0 3
  •   函数表达式是 JavaScript 中的一个既强大有容易令人困惑的特性。定义函数的的方式有两种: 函数声明; ...
    霜天晓阅读 835评论 0 1
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,748评论 1 45
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,144评论 1 32