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>

JavaScript中使用比较多的两种创建对象的方式的更多相关文章

  1. MyBatis中主键回填的两种实现方式

    主键回填其实是一个非常常见的需求,特别是在数据添加的过程中,我们经常需要添加完数据之后,需要获取刚刚添加的数据 id,无论是 Jdbc 还是各种各样的数据库框架都对此提供了相关的支持,本文我就来和和大 ...

  2. Javascript学习笔记:9种创建对象的方式

    最基本的对象创建方式是通过Object构造函数或对象字面量的方式创建: ①通过Object构造函数的方式创建对象: var person=new Object();//或者写成var person={ ...

  3. Nginx使用的php-fpm的两种进程管理方式及优化

    PS:前段时间配置php-fpm的时候,无意中发现原来它还有两种进程管理方式.与Apache类似,它的进程数也是可以根据设置分为动态和静态的. php-fpm目前主要又两个分支,分别对应于php-5. ...

  4. (总结)Nginx使用的php-fpm的两种进程管理方式及优化

    PS:前段时间配置php-fpm的时候,无意中发现原来它还有两种进程管理方式.与Apache类似,它的进程数也是可以根据设置分为动态和静态的. php-fpm目前主要又两个分支,分别对应于php-5. ...

  5. Ajax中的get和post两种请求方式的异同

    Ajax中我们经常用到get和post请求.那么什么时候用get请求,什么时候用post方式请求呢? 在做回答前我们首先要了解get和post的区别.   1. get是把参数数据队列加到提交表单的A ...

  6. javascript文件夹选择框的两种解决方案

    javascript文件夹选择框的两种解决方案 解决方案1:调用windows 的shell,但会有安全问题. * browseFolder.js * 该文件定义了BrowseFolder()函数,它 ...

  7. 在asp.net中使用confirm可以分为两种:

    在asp.net中使用confirm可以分为两种: 1.没有使用ajax,confirm会引起也面刷新 2.使用了ajax,不会刷新 A.没有使用ajax,可以用StringBuilder来完成. ( ...

  8. JavaScript中的this关键字的几种用法

    JS 里的 this 在 function 内部被创建 指向调用时所在函数所绑定的对象(拗口) this 不能被赋值,但可以被 call/apply 改变 1. this 和构造函数 function ...

  9. .net中创建xml文件的两种方法

    .net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...

随机推荐

  1. Effective C++(1-2) 编译器替换预处理器

    1 C++最主要的四部分: C Object-Oriented C++: 面向对象 Template C++:泛型编程 STL C++高效编程守则视状况而变化,取决于你使用C++的哪一部分. 2 尽量 ...

  2. pandas 入门

    1. 默认的pandas不能读取excel.需要安装xlrd, xlwt才能支持excel的读写 pip install xlrd #添加读取excel功能 pip install xlwt #添加写 ...

  3. Linux命令--文件处理

    touch命令 Linux touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间.若文件不存在,系统会建立一个新的文件. ls -l 可以显示档案的时间记录. 语法 touch [-a ...

  4. Chapter 4 Left Outer Join in MapReduce

    4.1 Introdution Consider a company such as Amazon, which has over 200 millions of users and possibly ...

  5. Codeforces-19D Point---线段树

    题目链接: https://cn.vjudge.net/problem/CodeForces-19D 题目大意: n个操作,在200000*200000的平面上加删点 find 严格在坐标右上角,x最 ...

  6. 34、springboot的热部署

    热部署 在开发中我们修改一个Java文件后想看到效果不得不重启应用,这导致大量时间花费, 我们希望不重启应用的情况下,程序可以自动部署(热部署).有以下四种情况,如何能实现热部署. 1.模板引擎 在S ...

  7. 2019.2.27 Eclipse中的Tomcat设置Tomcat服务器手动重启

    1.打开Tomcat的设置界面 2.找到Modules界面 3.去掉,就改为手动了

  8. 20155203 2016-2017-4 《Java程序设计》第9周学习总结

    20155203 2016-2017-4 <Java程序设计>第9周学习总结 教材学习内容总结 课堂内容 两个类如果有公共的部分要放在父类中,多次复用.当我们用父类或接口去声明对象的引用生 ...

  9. FreeMarker之根据模板生成Java代码

    FreeMarker根据模板生成Java代码,光这句话,大家想必也知道它的应用了,比如流行的DRY原则,该原则的意思,可简单概述为"不要写重复的代码". 比如Java中三层架构,数 ...

  10. PAT——1043. 输出PATest

    给定一个长度不超过10000的.仅由英文字母构成的字符串.请将字符重新调整顺序,按“PATestPATest....”这样的顺序输出,并忽略其它字符.当然,六种字符的个数不一定是一样多的,若某种字符已 ...