美文网首页程序员の必经之路饥人谷技术博客
这次再忘什么是this,我就直播吃电脑

这次再忘什么是this,我就直播吃电脑

作者: 春木橙云 | 来源:发表于2017-03-31 16:14 被阅读134次

    我们都知道,调用一个函数一共有四种调用模式:

    • 方法调用模式

      • 定义:当一个函数被保存为对象的一个属性的时候,这个函数被称为方法。
      • 此时的this:当一个方法被调用的时候,this绑定到该对象上。
      • 举例子
        var obj = {
        name:"harrisking",
        foo: function(){
        console.log(this.name);//harrisking
        //这里的this指的就是obj;
        }
        }
    • 函数调用模式

      • 定义:当一个函数并非一个对象的属性时,则这个函数就是一个函数来调用的。
      • 此时的this:以此模式调用函数时,this被绑定到全局对象(window)。
      • 举例子
        var a = function(){
        console.log(this.b())
        }
        var b = function(){
        console.log("马达,又躺枪!")
        }
        a();//"马达,又躺枪!"
    • 构造器调用模式

    • 定义:如果一个函数前面带上一个new来调用,则该函数就是作为构造函数来调用的。

      • 这里要补充一个重要的知识点——new到底做了些啥?
        当一个构造函数前加上new的时候,背地里来做了四件事:
        1,生成一个空的对象并将其作为 this;
        2,将空对象的proto 指向构造函数;
        3,运行该构造函数;
        4,如果构造函数没有 return 或者 return 一个返回 this 值是基本类型,则返回
        this;如果 return 一个引用类型,则返回这个引用类型。
    • 此时的this:这时候,this被绑定到了新构造的对象上。

    • 举例子
      var People = function(name,age){
      this.name = name;
      this.age = age;
      };
      var p1 = new People('harrisking',23);
      p1.name;//harrisking;

    • apply调用模式

    • 定义:apply和call的方法很像,它拥有两个参数:一个是预设定的this,一个是要传递的参数(apply传递的是数组)。


    分割线


    敬爱的方方老师推荐的方法是:
    将上述四种调用方式还原为call/apply形式。
    则:

    • 方法调用模式:
      obj.foo( ) ==> obj.foo.call('obj');则this就是obj;
    • 函数调用模式:
      a() ==> window.a.call() ==> 因为call未指定this的值,则这里的this代表window;

    最后特此感谢方方老师的原文 this的值到底是什么

    相关文章

      网友评论

      本文标题:这次再忘什么是this,我就直播吃电脑

      本文链接:https://www.haomeiwen.com/subject/kgjvottx.html