美文网首页
创建对象常用的四种方式Ⅲ

创建对象常用的四种方式Ⅲ

作者: 7月7日晴i | 来源:发表于2017-07-20 22:56 被阅读0次

    构造函数模式

    回顾一下上一篇说的工厂函数模式,它的好处是可以批量的生产对象。

    系统内置类数组创建的方式

    var arr = new Array();
    

    差别
    1.调用方式不同 一个一直调用 一个new调用
    2.首字母大写

    用new调用和函数执行调用的区别:

    function Fn(){
    
    }
    var res1 = Fn(); //直接调用 返回值是undefined
    var res2 = new Fn(); // 用new调用 返回的是当前类的实例
    // 使用new调用的时候 Fn有了一个新的名字 => 类 .new Fn()的过程 叫做创建Fn的实例 默认返回当前类的实例的对象 =>this
    console.log(res1,res2); //undefined,Fn
    
    function Fn(){
      console.log(this); //Fn
    }
    console.log(res2); //Fn
    

    构造函数

    function Person(name,age){
      this.name = name; 
      this.age = age; 
      this.say = function(){ 
        console.log("my name is"+this.name+"my age is"+this.age);
     }
    var p1 = new Person("Jack",9);
    p1.say(); //my name is Jack my age is 9
    

    需要注意
    1.如果在构造函数模式中 new Fn()执行,如果Fn不需要传递参数的话,括号可以省略

    function Fn(){
      this.say = function(){
        console.log("fn 执行");
      }
    }
    var f1 = new Fn(); // 如果不传参数 可以把()省略
    f1.say();
    

    2.this的指向问题,在类中出现的this.xxx = xxx中的this都是指向当前类的实例
    3.什么是类?什么是实例?
    把类理解成生产线,实例理解成产品

    function Car(){ //Car这个类相当于汽车的生产线
    
    }
    var c1 = new Car(); // 这就是一个实例
    var c2 = new Car();
    

    4.在构造函数模式中,函数名叫做类名,类有普通函数的一面,当函数执行的时候,var num 其实只是当前形成的私有作用域和私有变量

    function Fn(){
      var num = 10; // 普通的局部变量
      this.name = "Jack";
      this.say = function(){
        console.log("hello");
      }
    }
    var f1 = new Fn();
    console.log(f1.num); // undefined
    

    5.在构造函数中,浏览器会默认把我们的实例返回(this),是一个对象数据类型的。如果用户指定返回值
    1)返回值是基本数据类型,那么用new调用时不理,仍然返回this。
    2)如果返回引用数据类型,那么不再默认返回this,而是返回用户指定的数据。

    function Fn(){
      return 123;
      return {"name":"jack"}; // 对象
      return function(){ // 函数
        console.log(123);
      }
    }
    var f1 = new Fn();
    console.log(f1); //Fn()  用new调用没有返回123,仍然返回this(当前类的实例)  会返回对象和函数
    
    function Fn(){
      return 123;
      return {"name":"jack"}; // 对象
      return function(){ // 函数
        console.log(123);
      }
    }
    var res = Fn();
    console.log(res); //123  返回对象和函数
    

    相关文章

      网友评论

          本文标题:创建对象常用的四种方式Ⅲ

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