zoukankan      html  css  js  c++  java
  • this, 你到底指向谁?

    JS中, this的值到底是什么?

    几个月之前, 拜读了《javascript语言精髓》, 里面对于这个问题, 做出了很好的解释...

    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
    

    本文转自:http://blog.163.com/thinker_creator/blog/static/1019331492009101545251234/

  • 相关阅读:
    2017ccpc全国邀请赛(湖南湘潭) E. Partial Sum
    Codeforces Round #412 C. Success Rate (rated, Div. 2, base on VK Cup 2017 Round 3)
    2017 中国大学生程序设计竞赛 女生专场 Building Shops (hdu6024)
    51nod 1084 矩阵取数问题 V2
    Power收集
    红色的幻想乡
    Koishi Loves Segments
    Wood Processing
    整数对
    Room and Moor
  • 原文地址:https://www.cnblogs.com/tnnyang/p/5667489.html
Copyright © 2011-2022 走看看