• js this指向


    JS中,this的值取决于调用的模式,而JS中总有4中调用模式:

    1.方法调用模式:

    当一个函数被保存为对象的一个属性时,我们称它为一个方法,当一个当法被调用时,this指向改对象,如:

    var obj = {
    
      value : 1,
    
      getValue : function(){
    
        alert(this.value);
    
      }
    
    };
    
    obj.getValue(); //输出1,此时的this指向obj 

    注意: 该模式下,this到对象的绑定发生在方法被调用的时候。

    2.函数调用模式:

    当一个函数并非一个对象的属性时,它被当作一个函数来调用,此时this指向全局对象(window),如:

    window.value = 1;
    
    function getValue (){
    
      alert(this.value);
    
    };
    
    getValue(); //输出1,此时的this指向window 

    3.构造器调用模式:

    结合new前缀调用的函数被称为构造器函数,此时的this指向该构造器函数的实例对象,如:

    function show(val){
    
      this.value = val;
    
    };
    
    show.prototype.getVal = function(){
    
      alert(this.value);
    
    };
    
    var func = new show(1);
    
    func.getVal(); // 输出1
    
    alert(func.value) //输出1

    // 从上面的结果,可以看出,此时的this指向了func对象

    4.apply/call 调用模式

    apply 和 call 方法可以让我们设定调用者中的this指向谁,如:

    var fun = function(str){
    
      this.status = str;
    
    }
    
    fun.prototype.getStatus = function(){
    
      alert(this.status);
    
    }
    
    var obj = {
    
      status : "loading"
    
    };
    
    fun.prototype.getStatus.apply(obj); //输出”loading“ ,此时getStatus方法中的this指向了obj

    补充说明:

    call方法:

    语法:call( [ thisObj [ , arg1 [ , arg2 [ ,  [ , .argN] ] ] ] ] )

    定义:调用一个对象的一个方法,以另一个对象替换当前对象。

    说明:call方法可以用来代替另一个对象调用一个方法。call方法可将一个函数的对象上下文从初始的上下文改变成由thisObj指定的新对象。

    如果没有提供thisObj参数,那么Global对象被用作thisObj。

    apply方法:

    语法:apply( [ thisObj [ , argArray ] ] )

    定义:应用某一对象的一个方法,用另一个对象替换当前对象。

    说明:

    如果argArray不是一个有效的数组或者不是arguments对象,那么将导致一个TypeError

    如果没有提供argArray 和 thisObj 任何一个参数,那么Global对象将被用作thisObj,并且无法被传递任何参数

    取自 : 《JavaScript 语言精髓》

  • 相关阅读:
    表示数值的字符串(C++描述)
    单链表是否有环及环入口点
    医院信息运维系统-信息科专用运维系统
    c# List 按类的指定字段排序
    运维系统说明
    更新库下载
    mysql数据库备份
    网络编程基础
    面向对象和过程,一样的价格,不一样的口味
    模块的导入顺序细节
  • 原文地址:https://www.cnblogs.com/CooLLYP/p/6508969.html
Copyright © 2020-2023  润新知