• js this


    在javascript中,this表示执行上下文,即指向一个对象的指针。

    1.最高层的执行上下文是windows对象,在全局作用域中,变量与函数是windows对象的属性。直接调用一个函数fun(), 等价于window. func(),则函数func中的this指向的是 window对象。

    (1)

    var a = 1;
    
    function A(){
    
        alert(this. a);
    
    }
    
    A();
    
    输出1。

    A()等价于windows.A(), 函数A在windows上下文中执行,this指向windows对象。a在全局作用域中定义并赋值,a属于windows对象的属性,输出1。

    (2)

    var a = 1;
    
    var obj = {
    
        a : 2,
    
        A : function(){
    
            alert(a);
    
        }
    
    }
    
    var B = obj. A;
    
    B();
    
    输出为1。

    B()等价于windows.B(), 函数B(即obj. A)的执行上下文是windows, this指向windows对象,因此输出为1。

    2.除了最高层的windows的对象,js生成的对象也可构成一个执行上下文。

    (1)

    var a = 1;
    
    var obj = {
    
        a : 2,
    
        A : function(){
    
            alert(this. a);
    
      }
    
    obj.A();
    
    输出2。

    函数A执行上下文是obj, this指向obj对像。this.a = obj.a = 2。

    (2)

    var a = 1;
    
    var obj = {
    
        a : 2,
    
        A : function(){
    
            alert(this.a);
    
         }
    
    }
    
    function B(){
    
        alert(this.a);
    
    }
    
    obj.C = B;
    
     
    
    obj.C();
    
    输出为2。

    obj.C即B函数的执行上下文是obj,this指向obj。

    B();
    
    输出为1。

    B函数的执行上下文是window对象,this指向window对象。

    3.默认情况下,this指向上下文。此外,可以指定this的指向。

    (1)通过new。执行new时,首先建一个空对象obj,再去执行类函数, 函数中的this指向新建的对象obj, 函数执行完后,obj被赋予一些属性。这个obj就是实例化的对象。

    function Class(a,b){
    
      this.a = a;
    
      this.b = b;
    
    }
    
    var obj = new Class('a','b');

    this指向实例化的obj对象。

    (2)通过apply()方法或call()方法。

    function Parent(c,d){
    
      this.c = c;
    
      this.d = d;
    
    }
    
    function Child(a,b,c,d){
    
      Parent.apply(this,[c,d]);//使Parent函数中的this指向Child函数中的this(即对象child),并执行Parent函数。
    
      this.a = a;
    
      this.b = b;
    
    }
    
    var child = new Parent('a','b','c','d');

    alert(child.c);

    输出c

     call方法与apply方法相同,call方法以单个参数传数据,apply方法以一个数组作为传数据的参数,上面的代码可改为Parent.call(this,c,d)。

  • 相关阅读:
    Joomla-2.5安装配置
    Drupal-7.x安装配置
    【Linux导论】Linux发行版安装(Linux Distribution Installation)
    【深度学习】卷积神经网络(Convolutional Neural Networks)
    【Linux导论】Linux引导流程(The Boot Process)
    【Linux导论】Linux文件系统基础(Linux Filesystem Basics)
    【Linux导论】Linux术语(Linux Terminology)
    【Linux导论】Linux发行版本(Linux Distributions)
    【Linux导论】Linux哲学(Linux philosophy)
    hashCode equals
  • 原文地址:https://www.cnblogs.com/fe-huahai/p/5507901.html
Copyright © 2020-2023  润新知