zoukankan      html  css  js  c++  java
  • 记录JS中的this

    var关键字

    任何时候,变量只能通过使用var关键字才能声明。不使用var 声明的只是全局对象的一个属性,可以使用delete操作符进行删除。

    全局代码中的this

    在全局代码中,this始终是全局对象本身,这样就有可能间接的引用到它了。

    函数代码中的this

    这种类型的代码中,this值的首要特点(或许是最主要的)是它不是静态的绑定到一个函数。

    this是进入上下文时确定,在一个函数代码中,这个值在每一次完全不同。

    不管怎样,在代码运行时的this值是不变的,也就是说,因为它不是一个变量,就不可能为其分配一个新值

    但可以声明一个var 变量 来存储 当前的 this 

    引用类型的值只有两种情况:

    1.     当我们处理一个标示符时
    2.     或一个属性访问器

    在该算法的返回值中,总是一个引用类型的值(这对this来说很重要)。

    标识符是变量名,函数名,函数参数名和全局对象中未识别的属性名。例如,下面标识符的值:

    var foo = 10;
    function bar() {}

    属性访问器都应该熟悉。它有两种变体:点(.)语法(此时属性名是正确的标示符,且事先知道),或括号语法([])。

    foo.bar();
    foo['bar']();

     一个函数上下文中确定this值的通用规则如下:

    在一个函数上下文中,this由调用者提供,由调用函数的方式来决定。如果调用括号()的左边是引用类型的值,this将设为引用类型值的base对象(base object),在其他情况下(与引用类型不同的任何其它属性),这个值为null。不过,实际不存在this的值为null的情况,因为当this的值为null的时候,其值会被隐式转换为全局对象。注:第5版的ECMAScript中,已经不强迫转换成全局变量了,而是赋值为undefined。

    this 的关系跟引用的类型有关

    函数调用和非引用类型

    当调用括号的左边不是引用类型而是其它类型,这个值自动设置为null,结果为全局对象。

    (function () {
      alert(this); // null => global
    })();

    在这个例子中,我们有一个函数对象但不是引用类型的对象(它不是标示符,也不是属性访问器),相应地,this值最终设为全局对象。

     

    “this 变量:永远指向函数运行时所在的对象,而不是函数被创建时所在的对象。

    如果处在匿名函数中、或者不处于任何对象中,this 都指向宿主的根对象(在浏览器里面就是 window)”

    没错,但我个人绝对,this就是一个需要宿主才可以生存的变量,我个人的判断,向this的上一级看,如果 this 是一个函数,那么宿主就肯定是window对象,如果this 是一个对象里面的,那么宿主就是对象或者是一个对象的方法里的this。

    外,javascript中还用 call() 和 apply() 来调用函数,再记住下面这两句话:

    如果是call()、apply()、with(),指定的this是谁,就是谁 !

    普通的函数调用,函数被谁调用,this就是谁。

     参考:http://julying.com/blog/javascript-this/

     

  • 相关阅读:
    Android ArrayAdapter使用
    Android 更改字体
    C# CRC16校验码 1.0
    获取当前主题颜色 Flutter
    C# 每个字节接受 处理串口数据 的方法
    C# CRC
    char* 与 string 互转
    typeof 子类获取父类
    flutter Row 垂直或水平放置多个widget
    flutter 容器 几种写法
  • 原文地址:https://www.cnblogs.com/yyman001/p/2633682.html
Copyright © 2011-2022 走看看