Как сделать полную копию из moment.js - PullRequest
0 голосов
/ 14 января 2019

Мне нужно скопировать 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

Ответы [ 3 ]

0 голосов
/ 14 января 2019

Используйте moment(Moment); для клонирования мгновенного объекта.

А 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>
0 голосов
/ 14 января 2019

От документов,

Все моменты изменчивы. Если вы хотите клонировать мгновение, вы можете сделать это неявно или явно. Вызов moment() на мгновение клонирует его.

Так что просто верните его на moment( momentObj )

0 голосов
/ 14 января 2019

Импортируйте «cloneDeep» из «Lodash», а затем

let momentCopy  = cloneDeep(moment); 

должно работать на вас.

...