js之对象创建方式

js中对象创建方式有多种,最常见的就是调用Object构造函数,下面我们来列举对象的创建的方式

一、Object构造

             var Dog = new Object();
             Dog.name = "peter";
             Dog.bark =function(){
             console.log(" my name is "+Dog.name);
             }
             Dog.bark();//输出my name is peter

此方法是最常见的生成方式,但不能指定想要的对象类型

二、字面量构造

               var Cat = {
                 name:"tony",
                 age :"5",
                bark : function(){
                    console.log("i am a cat" );
                 }
               }
               Cat.bark();

此方法是上面的补充,他与new Object()没有区别

三、工厂模式创建

               function createObj(name,age){
                    var obj = new Object();
                    obj.name = name;
                    obj.age = age;
                    obj.bark = function(){
                        console.log("hello i am createObj,i am "+obj.age+" old");
                    }
                    return obj; //返回一个obj
                }  

                  var obj = createObj("pony","33");
                  obj.bark();

此方法适合批量生成对象,避免代码重复,但问题和第一个一样,不能判断对象类型,因为都是基类Object

四、构造函数创建

                  function Person(name,age){
                      this.name = name;
                      this.age  = age;
                      this.bark = function(){
                          console.log("hello i am construct");
                      }
                  }
                  var child = new Person("sily","18");
                  console.log(child.name);

此方法中的new关键字很重要,首先他会在内部常见一个object赋给this 然后通过this绑定变量和方法,最后隐式的return this 出去。

此方法的缺点是每次创建对象的时候后都会生成相应的方法,浪费内存

五、原型创建

                  function Animal(){}
                  Animal.prototype.name = "peter";
                  Animal.prototype.age  =  10;
                  Animal.prototype.bark = function(){
                      console.log("hello, i am a prototype function");
                  }
                  var fish = new Animal();
                  fish.bark();

该方法创建的对象,都在原型链上,所有实例共享,也就是说,一旦有实例修改了该方法,则所有实例的该方法都会改变,但大多数时候我们还是需要私有方法和属性,说以一般都用原型构造这种组合模式来创建对象

原文地址:https://www.cnblogs.com/maoxiaodun/p/10012321.html