js中创建多个对象的两种方法

1.工厂模式创建对象

   function createPerson(name, age, hobby) {
      var obj = new Object();
      obj.name = name;
      obj.age = age;
      obj.hobby = hobby
      obj.say= function () {
        console.log(this.name + "喜欢" + hobby);
      };
      return obj;
    }
    // 测试
    var p1=createPerson('张三',22,'踢足球');
    var p2=createPerson('李四',18,'打游戏');
    p1.say();//张三喜欢踢足球
    p2.say();//李四喜欢打游戏
    console.log(p1 instanceof Object);//true
    console.log(p1 instanceof createPerson);//false

工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题,用instanceof只能辨别实例是一个对象,而无法辨别这个实例是谁的对象。而且每生成一个实例就会增加一些重复的内容,会造成资源浪费。

2.自定义构造函数创建对象

  function Person(name,age,hobby){
    this.name=name;
    this.age=age;
    this.hobby=hobby;
    this.say=function(){
      console.log(this.name + "喜欢" + hobby);
    }
  }
  var p1=new Person('张三',22,'踢足球');
  var p2=new Person('李四',18,'打游戏');
  p1.say();//张三喜欢踢足球
  p2.say();//李四喜欢打游戏
  console.log(p1 instanceof Object);//true  即p1是Object的实例
  console.log(p1 instanceof Person);//true  即p2是Person的实例

构造函数 ,是一种特殊的函数。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。使用构造函数时要注意以下几点:

1.构造函数首字母要大写(推荐做法)。
2.构造函数要和new一起使用才有意义。
3.构造函数的作用是用于实例化一个对象,即给对象添加属性和方法。
使用new操作符给 Person创建一个新实例会经历以下四个步骤:
(1)创建一个新对象
(2)将构造函数的作用域赋给新对象(因此this就指向了这个新对象)
(3)执行构造函数中的代码(为这个新对象添加属性)
(4)返回新对象
使用构造函数的主要问题,就是每个方法都要在每个实例上重新创建一遍

你可能感兴趣的:(JavaScript学习路径)