工厂模式


优点:接受参数,可以无数次的调用这个函数,创建Person对象,而每次他都可以返回一个包含三个属性一个方法的对象。

缺点:虽然解决了创建多个相似对象的问题,但是没有解决对象识别的问题(即怎么知道一个对象的类型)。


构造函数模式

JS中可以创建自定义的构造函数,从而定义自定义对象属性和方法。

♦ Person()中的代码和createPerson()的不同之处:

1、没有显式地创建对象

2、直接将属性和方法赋给了this对象

3、没有return语句

♦ 要创建Person对象的新实例,必须使用new操作符。以这种方式调用构造函数世纪上会经历一下四个步骤:

1、创建一个新对象。

2、将构造函数的作用域赋给新对象(因此this就指向这个新对象)

3、执行构造函数中的代码(为这个新对象添加属性)

4、返回新对象

优点:创建自定义的构造函数意味着将来可以将它的实例标识为一种特定的类型。

缺点:每个方法都要在每个实例上重新创新一遍。person1,person2都有一个名为sayName()的方法,但这两个方法不是同一个Function的实例。因为ECMAScript中的函数是对象,所以每定义一个函数都是实例化了一个对象。


原型模式


♦理解原型对象

1、我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向函数的原型对象。

2、默认情况下,所有原型对象都自动获得一个constructor属性,这个属性是一个指向prototype属性所在函数的指针。

3、当调用构造函数创建一个新实例后,该实例的内部将包含一个指针(内部属性)[[Prototype]],指向构造函数的原型对象。

注意:

1、Person 的每个实例都包含一个内部属性,该属性仅仅指向了Person。prototype;换句话说,他么与构造函数之间没有直接的关系。

2、虽然这两个实例都不包含属性和方法,但我们却可以调用person1.sayName()。这是通过查找对象属性的过程来实现的。

当代码读取某个对象的属性时,都会执行一次搜索,目标是具有给定名字的属性。搜索首先从对象实例本身开始,如果在实例中找到了具有给定名字的属性,则返回该属性的值,如果没有找到,则继续搜索指针指向的原型对象,在原型对象中查找具有给定名字的属性。

优点:减少了代码的重复,也可用标识来创建对象。

缺点:1、它省略了为构造函数传递初始化参数这一环节,结果所有势力在默认情况下都将取得相同的属性值。

2、原型中所有属性是被很多势力共享的,这种共享对函数来说非常适合,对于那些包含基本值的属性也还说得过去,但是对于包含引用类型值的属性来说,就是一个问题了,因为实例一般都有属于自己的全部属性。


组合使用构造函数模式和原型模式


构造函数模式用于定义实例属性,而原型模式用于定义方法和共享的属性。这样,每个实例都有自己的一份实力属性的副本,但同时又共享着对方法的引用,最大限度的节省了内存。而且还支持向构造函数传递参数。这种方式也是ECMAScript种使用最广泛,认同度最高的一种创建自定义类型的方法。


另外还有动态原型、寄生构造函数模式、稳妥构造函数模式等方式。

JS 创建自定义对象的方法相关推荐

  1. JavaScript学习笔记:创建自定义对象

    文章目录 一.利用构造函数模式创建自定义对象 二.采用原型模式创建自定义对象 三.采用混合模式创建自定义对象 四.采用动态原型模式创建自定义对象 一.利用构造函数模式创建自定义对象 使用构造函数可以创 ...

  2. [置顶] 深入浅出Javascript(三)创建自定义对象以及属性、方法

    怎么样创建一个对象? 利用Object创建自定义对象 JavaScript能够自定义对象来扩展程序的功能,不仅如此,它还能扩展JavaScript提供的内置对象,新增内置对象的属性或方法 例如下面代码 ...

  3. js 创建file对象_JS 之创建对象

    阅读本文约需要6分钟 大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈).上次老师跟大家分享了JS 之类的知识,今天跟大家分享下JS 之创建对象的知识 ...

  4. js中自定义对象、json对象、json字符串、普通js对象 --js学习那本书上的

    4.7 自定义对象 JS除了内置对象之外,还允许我们程序自己定义属于我们自己的对象,在JS中自定义对象的方式有2种:通过构造器创建对象,通过初始化器创建对象. 4.7.1 构造器创建对象(原生JS对象 ...

  5. js中自定义对象、json对象、json字符串、普通js对象

    4.7 自定义对象 JS除了内置对象之外,还允许我们程序自己定义属于我们自己的对象,在JS中自定义对象的方式有2种:通过构造器创建对象,通过初始化器创建对象. 4.7.1 构造器创建对象(原生JS对象 ...

  6. Js中自定义对象四种方式

    Js中自定义对象四种方式 1 类似JAVA有参构造方式: 1.定义对象: function 对象(属性[age]){追加属性:如(this.age = age)[this代表当前对象的地址值的引用]追 ...

  7. JavaScript实现创建自定义对象的常用方式总结

    2019独角兽企业重金招聘Python工程师标准>>> 1. 对象字面量方式 对象字面量方式是创建自定义对象的首选模式,简单方便. var per = { name:'zhangsa ...

  8. java 获取对象方法有哪些方法有哪些方法有哪些_Java中创建String 对象的方法有哪些...

    Java中创建String 对象的方法有哪些 发布时间:2020-11-25 16:45:30 来源:亿速云 阅读:71 作者:Leah 这篇文章将为大家详细讲解有关Java中创建String 对象的 ...

  9. js的数组和对象的多种复制和清空, 以及区分JS数组和对象的方法

    js的数组和对象的多种"复制"和"清空", 以及区分JS数组和对象的方法 一.数组清空与复制方法 1.数组清空的方法 var a = [1,2,3]; a.le ...

最新文章

  1. wechaty QR code not recognizable..
  2. 基于词典的逆向最大匹配中文分词算法,更好实现中英文数字混合分词
  3. web报告工具FineReport在使用方法和解决方案常见错误遇到(一)
  4. 一些关于“数据挖掘介”技术的有用文档
  5. php rmdir 返回值,php通过rmdir删除目录的简单用法
  6. FastJson/spring boot: json输出
  7. 转:微服务设计、拆分原则
  8. html文字转语音代码,【JavaScript】实现文本转语音功能
  9. 在python语言中不能作为变量名的是什么_4、 在 Python 中可以使用 if 作为变量名。 (1.0分)_学小易找答案...
  10. PS将两张图像合成为一张
  11. 按照层次序列创建二叉树,并判断二叉树是否为二叉搜索树
  12. 双目估计方法_基于双目视觉的自动驾驶技术
  13. 阵列信号处理 窄带信号与包络
  14. Homography 单应性变换详解
  15. 企业级BOM项目建设概况
  16. 华新集团再冲刺港交所上市:上半年收入2.6亿元,张德红为董事长
  17. [IOS]hitTest的作用与用法【转】
  18. 湖南省政务云灾备_全省唯一的省级政务云灾备基地在内江正式启动
  19. 中国桑叶提取物市场投资分析及需求前景预测报告2022-2027年
  20. Materials - 使用Substance Designer制作哥特式花纹

热门文章

  1. POJ - 1698 Alice's Chance(二分图多重匹配-网络流)
  2. POJ - 1190 生日蛋糕(dfs+剪枝)
  3. HDU - 5335 Walk Out(bfs+路径输出+贪心)
  4. 三年级人教版下学期计算机教案,人教版三年级下册信息技术教案
  5. 7.OD-字符串参考
  6. 《openssl 编程》之错误处理
  7. C++虚继承(八) --- 虚继承与继承的差异
  8. 指令和伪指令和宏指令区别
  9. 网狐棋牌(一) ServerKernel中的IQueueService接口分析
  10. STL 之fill和fill_n