前置知识:本质上任何函数在执行时都是通过某个对象调用的

this是什么?

  • 一个关键字, 一个内置的引用变量
  • 在函数中都可以直接使用this
  • this代表调用函数的当前对象
  • 在定义函数时, this还没有确定, 只有在执行时才动态确定(绑定)的

如何确定this的值?

  • test() window
  • obj.test() obj
  • new test() 新创建的对象
  • test.call(obj) obj

    1. function Person(color) {
    2. console.log(this)
    3. this.color = color;
    4. this.getColor = function () {
    5. console.log(this)
    6. return this.color;
    7. };
    8. this.setColor = function (color) {
    9. console.log(this)
    10. this.color = color;
    11. };
    12. }
    13. Person("red"); //this是谁? window
    14. var p = new Person("yello"); //this是谁? p
    15. p.getColor(); //this是谁? p
    16. var obj = {};
    17. p.setColor.call(obj, "black"); //this是谁? obj
    18. var test = p.setColor;
    19. test(); //this是谁? window
    20. function fun1() {
    21. function fun2() {
    22. console.log(this);
    23. }
    24. fun2(); //this是谁? window
    25. }
    26. fun1();