美文网首页
创建对象

创建对象

作者: 唐卡豆子 | 来源:发表于2018-10-18 00:08 被阅读0次

工厂方式

function Car(name, color){
        let car = new Object();// 每一次通过工厂方法去创建一个对象
        car.name = name;
        car.color = color;
        car.say = function(){
          console.log(this.color);
        }
        return car;
      }
      var c1 = Car('xp', 'red');
      var c2 = Car('BMW', 'white');
      c1.say ();
      c2.say ();

缺点:
1.无法确定对象的类型(因为都是Object)。
2.创建的多个对象之间没有关联。
3.这个对象的属性name和方法say 都必须重新创建一次,浪费内存

构造函数

function Car(name, color){
        this.name = name;
        this.color = color;
        this.say = function(){
          alert(name);
        }
      }

      let car = new Car('kiwi', 'red');
      car.say();

缺点:
1.多个实例重复创建方法,无法共享。
2.多个实例都有say 方法,但均不是同一个Function的实例。

原型

    function Car(){

      }

      Car.prototype.name = 'kiwi';
      Car.prototype.color = 'red';
      Car.prototype.list = new Array('a', 'b');
      Car.prototype.say = function(){
        console.log(this.name+'---------------------');
      }
      let car = new Car();
      car.say();
      car.name = 'jojo';
      car.list.push('c');
      console.log(car.name);// jojo
      console.log(car.list);// 数组的引用值,Car的两个对象指向的都是同一个数组
      car.say();// a,b,c

      let car2 = new Car();
      car2.say();
      console.log(car2.name);// kiwi
      console.log(car2.list);//a,b,c

缺点:
1.无法传入参数,不能初始化属性值。
2.如果包含引用类型的值时,改变其中一个实例的值,则会在所有实例中体现。

混合原型,构造函数

// 构造函数
      function Car(name, color){
        this.name = name;
        this.color = color;
        this.list = new Array('a', 'b');
      }
      // 原型
      Car.prototype.say = function(){
        console.log(this.color+'---------------------');
      }
      let car = new Car('kiwi', 'red');
      car.list.push('c');
      console.log(car.list);// a, b, c

      let car2 = new Car('kiwi', 'red');
      console.log(car2.list);// a, b

优点: 这种是目前用的最多的创建类和对象的方式, 将方法和属性用不同的方式封装.
构造函数共享实例属性,原型共享方法。可传递参数,初始化属性值。

动态原型,构造函数

// 构造函数
      function Car(name, color){
        this.name = name;
        this.color = color;
        this.list = new Array('a', 'b');
        // 属性的方法不会被重复创建, 只执行一次
        if (typeof this.say != 'function'){
          Car.prototype.say = function(){
            console.log(this.name);
          }
        }
      }

相关文章

  • javascript面向对象解析(一)

    创建对象的方式 json对象方式创建对象 Object方式 声明构造函数方式,创建对象 -- 这种创建对象的方式用...

  • JS对象

    JS 创建对象 批量创建对象

  • JavaScript基础—对象

    概论 对象基础 创建对象 利用字面量创建对象: 使用对象 利用new Object创建对象 使用对象方式与上面完全...

  • JS 创建对象的四种方式

    通过对象字面量来创建 通过 new Object() 创建对象 通过工厂函数来创建对象 通过构造函数来创建对象 工...

  • JS笔记-006-JS对象-数字-字符串-日期-数组-逻辑

    JS对象 创建 JavaScript 对象 通过 JavaScript,您能够定义并创建自己的对象。 创建新对象有...

  • 创建对象

    1. 原始方法 2. 工厂方法 3. 构造函数 4. 原型函数 5. 混合构造函数\原型函数 6. 动态原型方法

  • 创建对象

    工厂方式 缺点:1.无法确定对象的类型(因为都是Object)。2.创建的多个对象之间没有关联。3.这个对象的属性...

  • 创建对象

    在ES5中 我们想创建一个对象,人。 我们想克隆多个相似的人怎么办?需要一个函数(资源)创造一个 对象模版(对象制...

  • 创建对象

    工厂模式发明一种函数,用函数来封装以特定接口创建对象的细节。 构造函数模式 使用new操作符,会经历四个步骤 原型...

  • 创建对象

    第三部分 创建对象 为类分配相应的空间,默认值为0。 id 变量名 = [类名 alloc]; 类名 *变量名 =...

网友评论

      本文标题:创建对象

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