V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iugo
V2EX  ›  Node.js

为什么 Buffer.from(array) 替代 new Buffer(array) ? 避免使用 new?

  •  
  •   iugo · 2017-06-09 10:15:47 +08:00 · 2716 次点击
    这是一个创建于 2505 天前的主题,其中的信息可能已经有所发展或是发生改变。
    以及类似的静态方法替代 new 的问题. 在 JavaScript 中这样做是基于什么原因?
    第 1 条附言  ·  2017-06-09 11:03:49 +08:00
    老老实实读了: https://nodejs.org/api/buffer.html#buffer_buffer_from_buffer_alloc_and_buffer_allocunsafe

    看来并不是对 new 有什么成见, 只是如 @ljcarsenal 所说, 不同参数会对行为有比较大的影响, 所以为了更加明确行为, 将 new 的功能分为三个. 并且建议开发者更换之前的 new Buffer() constructors 为新 API.
    10 条回复    2017-06-09 11:05:15 +08:00
    ljcarsenal
        1
    ljcarsenal  
       2017-06-09 10:17:35 +08:00   ❤️ 2
    我记得是 new Buffer()可以接受不同类型的参数 产生不同的结果,容易引起歧义吧,所以都给改掉了
    wwulfric
        2
    wwulfric  
       2017-06-09 10:30:50 +08:00
    如果每次传入的 array 一样,生成的都是同一个 Buffer。但是 new Buffer 每次都会生成一个新的 Buffer,即使每次调用的时候都是同样的 array

    以上是我猜的,我没写过 js
    lrannn
        3
    lrannn  
       2017-06-09 10:32:36 +08:00
    为什么这个帖子是黑色的背景?
    phx13ye
        4
    phx13ye  
       2017-06-09 10:36:20 +08:00
    可以看下 joshua bloch 的 effective java 关于静态工厂的章节
    蛤蛤,java 狗撸过
    miyuki
        5
    miyuki  
       2017-06-09 10:37:29 +08:00 via Android
    @lrannn

    Node.js
    miyuki
        6
    miyuki  
       2017-06-09 10:37:50 +08:00 via Android
    @lrannn 节点主题
    zhihy123
        7
    zhihy123  
       2017-06-09 10:46:41 +08:00
    buffer 成为内置模块了,文档上写了,不过其他的我就不记得了~
    exoticknight
        8
    exoticknight  
       2017-06-09 10:55:54 +08:00
    查了一下,Buffer.from(array) 还有一个调用的方式,那个能够直接用 TypedArray 的 buffer,所以用 new 容易引起歧义
    iugo
        10
    iugo  
    OP
       2017-06-09 11:05:15 +08:00
    @seki 我刚去看了文档, 您就发来了链接. 心有灵犀呀~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4197 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 05:28 · PVG 13:28 · LAX 22:28 · JFK 01:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.