JS基础笔记-关于this指向 & 使用工厂方法创建对象

95 阅读1分钟

this使用频率很高,指向问题很重要,合理使用this,可以让我们写出简洁且复用性高的代码

函数里会有一个隐含的参数this,this指向的是一个对象(称为上下文对象)

调用方式不同,this会指向不同的对象

  • 函数形式调用,this会指向window
  • 方法形式调用,this指向 调用方法的对象
  • 总结来说,this指向的是最后调用它的那个对象
    function fun(a, b) {
      console.log(this); //window
    }
    fun();// 其实就是window.fun();
    var obj = {
      name: "小红",
      sayName: fun
    }
    // console.log(obj.ss == fun); //true
    obj.sayName();
    function fun() {
      var = name = "局部";
      console.log(this.name);//这里this就可以保证调用者的不同,变成不同的答案,否则如果是name就一直都是“全局”
    }
    var obj = {
      name: "小红",
      sayName: fun
    }
    var obj2 = {
      name: "小名",
      sayName: fun
    }
    fun();//全局
    obj.sayName();
    var obj1 = {
      name: "小名",
      sayName: function () {
        alert(this.name);//小名
      }
    }
    var obj2 = {
      name: "小q",
      sayName: function () {
        alert(this.name);//小q
      }
    }
    var obj3 = {
      name: "小t",
      sayName: function () {
        alert(this.name);//小t
      }
    }
    obj2.sayName();
    
    
    
    //以上创建函数重复太多,怎么提高效率呢,可以将大量重复的代码提取出来
    使用工厂方法创建对象,通过该方法可以大批量的创建对象
    
    //如下
    function creatPerson(name, age, gender) {
      //创建一个新的对象
      var obj = new Object();
      obj.name = name;
      obj.age = age;
      obj.gender = gender;
      obj.sayName = function () {
        console.log(this.name);
      }
      return obj;
    }
    
    var obj2 = creatPerson("小明", 12, "女");
    var obj3 = creatPerson("小额", 19, "女");
    var obj4 = creatPerson("小u", 17, "女");
    console.log(obj2, obj3, obj4);