由于今天有点事,加上对象原型链的东西有点多,所以今天这篇就讲一个小的知识点吧

也算为明天的对象继承做铺垫

工厂模式

虽然使用对象字面量来创建一个对象十分地便捷,但是这个方法有一个显著的缺点

那就是如果我们需要为一个接口创建多个对象,那么将会产生大量的重复代码

所以工厂模式氤氲而生

所谓工厂模式,也就是让我们的代码成为一个工厂,通过这个工厂我们可以源源不断地产生同一产品

其大体实现如下

function createPerson(age,job,name){
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayName = function(){
alert(o.name);
}
return o;
}

通过上面这样一种方式我们就可以很便捷地生成一种具有三个属性一个方法的对象

虽然这种方法解决了重复代码的问题,但是还有一个问题,对于多个相似的对象我们如何识别对象类型的问题

也就是说这样的方式我们没法判断对象的类型

构造函数模式

刚才的问题,构造函数模式就是答案

通过该模式我们就可以使用 instanceof 操作符来判断一个对象的类型

以刚才的工厂模式创建的对象举例

其构造函数模式基本实现如下:

function Person(age,job,name){
this.age =age;
this.name = name;
this.job = job'
this.sayName = function(){
alert(this.name);
}
}

这种方法在使用上也与工厂模式有所区别,工厂模式实际上就是封装了创建一类对象的函数

而构造函数模式不能直接调用,如果直接调用将会为全局对象(window)创建age、name、job、sayName几个属性

要使用 new  操作符来进行调用

new操作符实现的功能在前几篇文章中已经详细介绍了

这里就不再赘述

原型模式

虽然构造函数解决了识别对象类型的问题

但是还有一个问题,拿刚才的例子来说,构造函数为每一个实例都创建了一个sayName的函数

而实际上这一步骤是没有必要的

这样如果创建了大量实例的情况下,会占用浏览器大量的内存

为了解决这一问题,原型模式诞生了

由于这里会涉及到原型链相关的东西,具体内容留到明天详细介绍

Javascript高级编程学习笔记(20)—— 创建对象的更多相关文章

  1. Javascript高级编程学习笔记(3)—— JS中的数据类型(1)

    前一段时间由于事情比较多,所以笔记耽搁了一段时间,从这一篇开始我会尽快写完这个系列. 文章中有什么不足之处,还望各位大佬指出. JS中的数据类型 上一篇中我写了有关JS引入的Script标签相关的东西 ...

  2. JavaScript高级编程学习笔记(第三章之一)

    继续记笔记,JavaScript越来越有意思了. 继续... 第三章:JavaScript基础 ECMAScript语法在很大程度上借鉴了C和其它类似于C的语言,比如Java和Perl. 大小写敏感: ...

  3. Javascript高级编程学习笔记(98)—— WebGL(4) WebGL上下文(2)

    错误 Javascript与WebGL之间的一个最大区别在于,WebGL的操作一般不会抛出错误 如果希望获取WebGL的错误信息,那么就需要手动调用  gl.getError() 方法 该方法会返回以 ...

  4. Javascript高级编程学习笔记(97)—— WebGL(3) WebGL上下文(1)

    WebGL上下文 在支持WebGL的浏览器中,WebGL的名字为 "experimental-webgl",这是由于 webgl 的规范仍未制定完成 制定完成后名字就会改为简单的 ...

  5. Javascript高级编程学习笔记(96)—— WebGL(2) 类型化视图

    类型化视图 类型化视图一般也被认为是一种类型化数组. 因为其元素必须是某种特定的数据类型,类型化视图都继承自 Dataview Int8Array: 表示8位二补整数(即二进制补数) Uint8Arr ...

  6. Javascript高级编程学习笔记(95)—— WebGL(1) 类型化数组

    WebGL webgl 是针对 canvas 的 3D上下文,与其它Web技术不同,WebGL并非是W3C制定的标准,而是由 Khronos Group 制定的. 类型化数组 WebGL所涉及的复杂运 ...

  7. Javascript高级编程学习笔记(1)—— JS简介

    此系列文章,用于记录所学,如有错误欢迎指出. Javascript组成 1.核心(ECMAScript) 2.文档对象模型(DOM) 3.浏览器对象模型(BOM) 1.核心(ECMAScript) E ...

  8. Javascript高级编程学习笔记(57)—— 事件(1)事件流

    事件 JS与HTML的交互是通过事件实现的 而事件指的就是:文档或浏览器窗口特定的交互瞬间 可以通过侦听器来预定事件,以便在事件发生时执行相应的代码 这种模式也是设计模式中的观察者模式 事件流 有了事 ...

  9. Javascript高级编程学习笔记(92)—— Canvas(9) 渐变

    渐变 渐变由 canvasGradient 实例表示 要创建一个渐变对象需要调用 createLinearGradient() 方法 该方法接收四个参数: 起点的x坐标 起点的y坐标 终点的x坐标 终 ...

随机推荐

  1. canvas中插入的图片 自适应 ?

    注意 不是用canvas画图 是在canvas中插入图片 我很是惊讶  为啥明明img标签就能解决的非要用canvas 不过别人写好的 我一般不会动 需求是 canvas中的图片自适应不能拉伸…… 老 ...

  2. 修改Tomcat控制台标题

    1.在tomcat的bin目录下新建文件setenv.bat 2.重启tomcat即可

  3. hbase-读操作

    (学习笔记) client和regionServer连接,通过rowkey查找对应的region 多个列簇生成多个storeScaner 每个storeScaner生成一个MemstoreScanne ...

  4. HYSBZ 2743 (树状数组) 采花

    题目:这里 题意: 在2016年,佳媛姐姐刚刚学习了树,非常开心.现在他想解决这样一个问题:给定一颗有根树(根为1),有以下 两种操作:1. 标记操作:对某个结点打上标记(在最开始,只有结点1有标记, ...

  5. 通过maven-assembly-plugin将Springboot项目打包成tar.gz压缩包,在Linux环境可执行脚本直接安装成系统服务

    1.在pom.xml中添加maven-assembly-plugin依赖,同时需将默认生成的spring-boot-maven-plugin依赖删除,否则最终打出的发行包启动会有问题 <plug ...

  6. 源码分析之groupcache之consistenthash

    很多时候读开源的库就是为自己准备大量的代码库,优秀开源项目代码质量比绝大部分人的代理质量都要高. 依赖的库 ```import ( "hash/crc32" "sort& ...

  7. PHP中写定时任务

    1.写一个bat E:\Progra~1\wamp\php\php.exe -f "E:\service.php" 2.写接口文件 ignore_user_abort(); //即 ...

  8. JS 变量提升与函数提升

    JS 变量提升与函数提升 JS变量提升 变量提升是指:使用var声明变量时,JS会将变量提升到所处作用域的顶部.举个简单的例子: 示例1 console.log(foo); // undefined ...

  9. English Conversations You Can Download for Free (Spoken English MP3/Audio Files)

    If you want to download free English conversations, you’ve come to the right place. This page introd ...

  10. 初识“FireBug”

    今天学习前端知识又一次提到“FireBug”这款插件,现在,把今天学到的一点东西简单记录下来. 什么是FireBug FireBug是一个用于网站前端开发的工具,它是FireFox浏览器的一个扩展插件 ...