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

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

  •  
  •   vevlins · 2018-03-14 21:05:48 +08:00 · 3147 次点击
    这是一个创建于 2478 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    5 条回复    2018-03-15 16:29:09 +08:00
    MinonHeart
        1
    MinonHeart  
       2018-03-15 09:59:02 +08:00 via iPhone   ❤️ 1
    new 不 new 就是区别了。new 了它是作 class 用,不 new 它是作函数用。区别当然是有没有自己的原型链了

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

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

    至于 “ new 开辟一个存储地址,耗资源好内存”……这是说的 c 艹 ,跟 js 没关系。
    chenalex
        3
    chenalex  
       2018-03-15 13:21:40 +08:00   ❤️ 1
    同楼上,字面量写法只是 new 的语法糖写法
    vevlins
        4
    vevlins  
    OP
       2018-03-15 14:17:44 +08:00
    @MinonHeart 我自己在浏览器环境下测试,得到的都是相同的实例化的对象。 这个自己的原型链是什么意思呢?
    MinonHeart
        5
    MinonHeart  
       2018-03-15 16:29:09 +08:00   ❤️ 1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1048 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:25 · PVG 03:25 · LAX 11:25 · JFK 14:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.