JavaScript中使用比较多的两种创建对象的方式

1、使用组合模式创建对象

原型模式创建对象适合封装方法,构造方法模式创建对象适合封装属性

组合方法缺点:将构造方法和原型分开写


<script type="text/javascript">
     //在构造方法内部封装属性
     function Person(name, age) {
         this.name = name;
         this.age = age;
    }
     //在原型对象内封装方法
     Person.prototype.eat = function (food) {
         alert(this.name + "Eat" + food);
    }
     Person.prototype.play = function (playName) {
         alert(this.name + "Play" + playName);
    }
     
     var p1 = new Person("Jack", 20);
     var p2 = new Person("Mark", 30);
     p1.eat("apple");
     p2.eat("orange");
     p1.play("football");
     p2.play("games");
 </script>

2、动态原型模式创建对象

动态原型模式把所有的属性和方法都封装在构造方法中,仅仅在需要的时候才去在构造方法中初始化原型,又保持了同时使用构造函数和原型的有点。


<script type="text/javascript">
     //构造方法内部封装属性
     function Person(name, age) {
         //每个对象都添加自己的属性
         this.name = name;
         this.age = age;
         /*
            判断this.eat这个属性是不是function,如果不是function则证明是第一次创建对象,
            则把这个funcion添加到原型中。
            如果是function,则代表原型中已经有了这个方法,则不需要再添加。
            perfect!完美解决了性能和代码的封装问题。
        */
         if(typeof this.eat !== "function"){
             Person.prototype.eat = function () {
                 alert(this.name + " Eat good");
            }
        }
    }
     var p1 = new Person("Jack", 40);
     p1.eat();  
 </script>

原文地址:https://www.cnblogs.com/wuweb/p/9376073.html