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>

最新文章

  1. JavaScript中Array类型方法总结
  2. RocketMQ与kafka对比(18项差异)-转自阿里中间件
  3. EL表达式语言总结
  4. 【Cocos2d-x 3.x】 调度器Scheduler类源码分析
  5. @RequestMapping用法详解
  6. child-selector解释
  7. WebService到底是什?
  8. 欧拉工程第60题:Prime pair sets
  9. Communications link failure报错的处理
  10. 开发者需要知道的11条HTML5小常识
  11. Openjudge/Poj 1183 反正切函数的应用
  12. 完整的 AJAX 写法(支持多浏览器)
  13. 关于C/C++函数指针声明的理解
  14. HTML中部分标签的嵌套问题
  15. Hibernate update 和 merge 、saveOrUpdate的区别
  16. 【BZOJ2241】【Sdoi2011R1D1】打地鼠
  17. 数据库之mysql篇(1)—— 数据库管理系统简介/mysql的安装、配置
  18. luogu P4448 [AHOI2018初中组]球球的排列
  19. ios轮播图片用法
  20. java 泛型与通配符(?)

热门文章

  1. Python学习---Django的基础学习
  2. ArcGIS的网络分析
  3. 【心得体会】我考完MOS我明白了…
  4. xss challenges平台学习
  5. MySQL语法相关其一
  6. [T-ARA][Day by Day]
  7. C#3.0新特性:隐式类型、扩展方法、自动实现属性,对象/集合初始值设定、匿名类型、Lambda,Linq,表达式树、可选参数与命名参数
  8. 5、Python,enumerate用法
  9. 全球参考系统(WRS)概述及常用工具汇总
  10. nginx开启gzip