• 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)。

  • 相关阅读:
    bzoj 3171 [Tjoi2013]循环格(MCMF)
    spoj 839 Optimal Marks(二进制位,最小割)
    bzoj 1458 士兵占领(最大流)
    bzoj 3931 [CQOI2015]网络吞吐量(最短路,最大流)
    bzoj 2229 [Zjoi2011]最小割(分治+最小割)
    bzoj 1324 Exca王者之剑(黑白染色,最小割)
    BestCoder Round #75 解题报告
    (转)php 根据url自动生成缩略图并处理高并发问题
    PHP生成图片太慢了。。有些都不出来、
    PHP加Nginx实现动态裁剪图片方案
  • 原文地址:https://www.cnblogs.com/fe-huahai/p/5507901.html
Copyright © 2020-2023  润新知