代码之家  ›  专栏  ›  技术社区  ›  talkhabi

如何从moment.js进行完整复制

  •  1
  • talkhabi  · 技术社区  · 6 年前

    我需要复印 moment 不带引用的新变量。

    let momentDate  = moment('2018-01-01', 'YYYY-MM-DD');
    
    // I need to create a full clone of moment here
    // Tried: 
    // -- let copy = {...moment}   
    // -- let copy = new(moment)   
    // -- let copy = clone(moment) // https://www.npmjs.com/package/clone
    // -- let copy = Object.assign({}, moment)
    let momentCopy  = /*new*/ moment; 
    
    momentCopy.fn.xFormat = function() {
        return this.format('[new-format-fn::]' + 'YYYY-MM-DD')
    }
    
    // expected Error:momentDate.xFormat is not a function
    // but xFormat applied to momentDate
    log(momentDate.xFormat()); 
    
    log(momentCopy().xFormat())
    

    有人能帮我吗?

    jsfiddle example

    3 回复  |  直到 6 年前
        1
  •  1
  •   Durga    6 年前

    使用 moment(Moment); clone 瞬间物体。

    moment.fn 是力矩原型。如果要向复制的对象添加自定义方法,可以将设置为 momentCopy.xFormat = function(){}

    let momentDate  = moment('2018-01-01', 'YYYY-MM-DD');
    
    let momentCopy  = moment(momentDate); 
    
    momentCopy.xFormat = function() {
        return this.format('[new-format-fn::]' + 'YYYY-MM-DD')
    }
    console.log(momentCopy.xFormat())
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.js"></script>
        2
  •  1
  •   Evan Carroll    6 年前

    the docs,

    所有时刻都是可变的。如果你想克隆一个瞬间,你可以隐式或显式地这样做。打电话 moment() 一会儿就会复制它。

    所以只要把它提供给 moment( momentObj )

        3
  •  0
  •   Asim Khan    6 年前

    从“lodash”导入“clonedeep”,然后

    let momentCopy  = cloneDeep(moment); 
    

    应该为你工作。