JS 创建对象的模式实例小结


Posted in Javascript onApril 28, 2020

本文实例总结了JS 创建对象的模式。分享给大家供大家参考,具体如下:

1.工厂模式

抽象了创建具体对象的过程,创建了一种函数,封装特定的接口创建对象的细节。

  • 新建一个对象
  • 定义属性和方法
  • return刚新建的对象
function createPerson(name, age, job) {
 var obj = new Object();
 obj.name = name;
 obj.age = age;
 obj.job = job;
 obj.sayHi = function() {
 congsole.log(this.name);
 };
 return obj;
}

var person1 = createPerson("name1", "age1", "job1");
var person2 = createPerson("name2", "age2", "job2");

存在问题:

没有解决对象识别的问题(怎么识别对象的类型)

2.构造函数模式

  • 不显式创建对象
  • 直接将属性和方法定义在this
  • 没有return
  • 通过 new操作符调用
function Person(name, age, job) {
 this.name = name;
 this.age = age;
 this.job = job;
 this.sayHi = function() {
 console.log(this.name);
 };
}

var person1 = new Person("name1", "age1", "job1");
var person2 = new Person("name2", "age2", "job2");

存在问题:

  • 每个方法都要在实例上创建一次

3.原型模式

创建的每一个函数都有prototype原型属性,这个属性是一个指针,指向一个对象,这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。

所有原生引用类型都在其构造函数的原型上定义了方法

function Person{

}

Person.prototype.name="name"
Person.prototype.age="age"
Person.prototype.job="job"
Person.prototype.sayHi=function(){
 console.log(this.name)
}

var person1=new Person()
var person2=new Person()

存在问题:

  • 所有属性是被很多实例共享的

4.组合构造和原型模式

构造函数用来定义实例属性,原型模式用来定义方法和共享的属性

function Person(name, age, job) {
 this.name = name;
 this.age = age;
 this.job = job;
}
Person.prototype={
 constructor:Person;
 sayHi:function(){
 console.log(this.name)
 }
}

var person1 = new Person("name1", "age1", "job1");

5.动态原型模式

这里对原型的修改,能够对所有实例生效,只在初次调用构造函数会执行

function Person(name,age,job){
 this.name=name;
 this.age=age;
 this.job=job;
 if(typeof this.sayHi !="function" ){
 Person.prototype.sayHi=functong(){
  console.log(this.name)
 }
 }
}

var person1 = new Person("name1", "age1", "job1");

6.寄生构造函数模式

工厂模式+构造函数

  • 返回的对象与构造函数、构造函数的原型属性之间没有关系
  • 不能依赖instanceof来去定对象原型
  • 不建议使用
function Person(name, age, job) {
 var obj = new Object();
 obj.name = name;
 obj.age = age;
 obj.job = job;
 obj.sayHi = function() {
 congsole.log(this.name);
 };
 return obj;
}

var person1 = new Person("name1", "age1", "job1");

7.稳妥构造模式

  • 没有公共属性
  • 不使用this
  • 不使用new
function Person(name, age, job) {
 var obj = new Object();
 // 定义室友变量和函数
 obj.sayHi = function() {
 congsole.log(name);
 };
 return obj;
}

var person1 = Person("name1", "age1", "job1");
// name1

摘抄自《JavaScript 高级程序设计》第六章

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
才发现的超链接js导致网页中GIF动画停止的解决方法
Nov 02 Javascript
jquery $.ajax入门应用一
Nov 19 Javascript
javascript json 新手入门文档
Dec 03 Javascript
2012年开发人员的16款新鲜的jquery插件体验分享
Dec 28 Javascript
第一次接触JS require.js模块化工具
Apr 17 Javascript
js实现四舍五入完全保留两位小数的方法
Aug 02 Javascript
jquery实现的回旋滚动效果完整实例【附demo源码下载】
Sep 20 Javascript
jQuery如何防止Ajax重复提交
Oct 14 Javascript
JS原生数据双向绑定实现代码
Aug 14 Javascript
jQuery实现checkbox即点即改批量删除及中间遇到的坑
Nov 11 jQuery
JavaScript实现多重继承的方法分析
Jan 09 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
Jan 30 Javascript
JavaScript console的使用方法实例分析
Apr 28 #Javascript
Node.js设置定时任务之node-schedule模块的使用详解
Apr 28 #Javascript
JavaScript Date对象功能与用法学习记录
Apr 28 #Javascript
JavaScript 链表定义与使用方法示例
Apr 28 #Javascript
Vue 3.0 全家桶抢先体验
Apr 28 #Javascript
React生命周期原理与用法踩坑笔记
Apr 28 #Javascript
js最全的数组的降维5种办法(小结)
Apr 28 #Javascript
You might like
php中explode与split的区别介绍
2012/10/03 PHP
PHP微信开发之查询微信精选文章
2016/06/23 PHP
将PHP的session数据存储到数据库中的代码实例
2016/06/24 PHP
两种方法实现文本框输入内容提示消失
2013/03/17 Javascript
JavaScript中的typeof操作符用法实例
2014/04/05 Javascript
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
2014/05/08 Javascript
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
理解AngularJs指令
2015/12/10 Javascript
简单谈谈javascript中this的隐式绑定
2016/02/22 Javascript
JS代码随机生成姓名、手机号、身份证号、银行卡号
2016/04/27 Javascript
JavaScript中数组Array.sort()排序方法详解
2017/03/01 Javascript
基于angular实现三级联动的生日插件
2017/05/12 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
2020/05/30 Javascript
react以create-react-app为基础创建项目
2018/03/14 Javascript
解决Vue中引入swiper,在数据渲染的时候,发生不滑动的问题
2018/09/27 Javascript
vue2.0 watch里面的 deep和immediate用法说明
2020/10/30 Javascript
Python datetime时间格式化去掉前导0
2014/07/31 Python
Python pandas实现excel工作表合并功能详解
2019/08/29 Python
基于python2.7实现图形密码生成器的实例代码
2019/11/05 Python
numpy.array 操作使用简单总结
2019/11/08 Python
详解Pycharm出现out of memory的终极解决方法
2020/03/03 Python
如何提高python 中for循环的效率
2020/04/15 Python
python -v 报错问题的解决方法
2020/09/15 Python
英国电子产品购物网站:TobyDeals
2018/07/30 全球购物
护理专科毕业推荐信
2013/11/10 职场文书
公关关系专员的自我评价分享
2013/11/20 职场文书
探亲邀请信范文
2014/01/30 职场文书
优秀高中生事迹材料
2014/02/11 职场文书
网站创业计划书
2014/04/30 职场文书
招股说明书范本
2014/05/06 职场文书
药店促销活动总结
2014/07/10 职场文书
2015小学教师年度工作总结
2015/05/12 职场文书
nginx搭建图片服务器的过程详解(root和alias的区别)
2021/03/31 Servers
Spring Boot配合PageHelper优化大表查询数据分页
2022/04/20 Java/Android
JS轻量级函数式编程实现XDM三
2022/06/16 Javascript
win11电脑关机鼠标灯还亮怎么解决? win11关机后鼠标灯还亮解决方法
2023/01/09 数码科技