js 创建对象的工厂模式和寄生构造函数模式的区别是什么?

2018-03-14 21:05:48 +08:00
 vevlins

js 高程中提到的,除了寄生构造函数在创建对象的时候需要 new 之外没有区别,那么这两种模式不同之处到底是什么,为什么一个需要 new 一个不需要 new。

另外还有一个经典的问题,子面量声明和 new 实例化的不同之处,有很多地方用了这一句话:“ new 关键字在内存开辟一个存储地址,比较耗资源,耗内存。字面量方式直接在内存中开辟一个存储字段,相对简单。”这句话怎么理解呢?为什么一个说存储地址,一个说存储字段?

2999 次点击
所在节点    JavaScript
5 条回复
MinonHeart
2018-03-15 09:59:02 +08:00
new 不 new 就是区别了。new 了它是作 class 用,不 new 它是作函数用。区别当然是有没有自己的原型链了

记得以前看到的是两种用法内部实现不同,没听过耗资源一说,具体跟 js 引擎的实现有关。耗内存?!神特码耗内存。写字面量主要是短,方便
BlockBlockBlock
2018-03-15 10:09:25 +08:00
嗯……如果我告诉你
const a = {} // ← 这里就是 new 了一个 Object 对象,你会怎么想?

所以根本不存在所谓的 new 或者不 new 的问题,因为无论如何你只要创造一个新对象那么必然会 new,区别只是显式还是隐式的问题。

至于 “ new 开辟一个存储地址,耗资源好内存”……这是说的 c 艹 ,跟 js 没关系。
chenalex
2018-03-15 13:21:40 +08:00
同楼上,字面量写法只是 new 的语法糖写法
vevlins
2018-03-15 14:17:44 +08:00
@MinonHeart 我自己在浏览器环境下测试,得到的都是相同的实例化的对象。 这个自己的原型链是什么意思呢?
MinonHeart
2018-03-15 16:29:09 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/438093

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX