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

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

工厂模式

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

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

所以工厂模式氤氲而生

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

其大体实现如下

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的函数

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

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

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

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

最新文章

  1. 学习笔记--C#深复制和浅复制
  2. 关于MySQL数据库优化的部分整理
  3. SQL Server 2005中的CTE递归查询得到一棵树
  4. Wix 安装部署教程(三)自定义安装界面和行为
  5. Xcode报错
  6. SO_REUSEADDR 和 SO_REUSEPORT
  7. preventDefault()方法
  8. 有趣 GIF 动图集 - 仿佛每张小动图都诉说了一个小笑话或者小故事
  9. 51nod1627 瞬间移动
  10. web.config配置aspx页面默认引用的namespace
  11. 【poj解题】3663
  12. 单点登录,session,jsonp(待更新)
  13. Android插件化 学习
  14. 【原创】java socket 和.net socket 通讯 demo
  15. 蜕变成蝶~Linux设备驱动之中断与定时器
  16. .NET的关于人脸识别引擎分享(C#)
  17. Java复习2-对象与类
  18. spark读取hdfs数据本地性异常【转】
  19. 04-树5 Root of AVL Tree (25 分)
  20. [k8s]metricbeat的kubernetes模块&kube-metric模块

热门文章

  1. CentOS7下开放端口
  2. gem 安装问题
  3. CentOS7.2 1511部署RabbitMQ
  4. js实现动态加载脚本的方法实例汇总
  5. PM学习梳理--需求管理
  6. 如何方便的在windows测试python程序
  7. affiliate的使用方式
  8. Vue下载页面显示内容
  9. windows 子系统 linux wsl 开启ssh 服务
  10. C++: cin