首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
V2EX  ›  JavaScript

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

  •  
  •   vevlins · 194 天前 · 740 次点击
    这是一个创建于 194 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    5 回复  |  直到 2018-03-15 16:29:09 +08:00
        1
    MinonHeart   193 天前 via iPhone   ♥ 1
    new 不 new 就是区别了。new 了它是作 class 用,不 new 它是作函数用。区别当然是有没有自己的原型链了

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

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

    至于 “ new 开辟一个存储地址,耗资源好内存”……这是说的 c 艹 ,跟 js 没关系。
        3
    chenalex   193 天前   ♥ 1
    同楼上,字面量写法只是 new 的语法糖写法
        4
    vevlins   193 天前
    @MinonHeart 我自己在浏览器环境下测试,得到的都是相同的实例化的对象。 这个自己的原型链是什么意思呢?
        5
    MinonHeart   193 天前   ♥ 1
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1889 人在线   最高记录 3762   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 23ms · UTC 13:48 · PVG 21:48 · LAX 06:48 · JFK 09:48
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1