Не могу использовать функции sugar.js

Я пытался использовать сахар. Ранее я использовал его год назад, и он работал хорошо таким образом:

> npm install sugar
test@1.0.0 D:\work\test\test
`-- sugar@2.0.4
> node
>> require('sugar');
{ [Function: Sugar]
.....
 Array:
   { [Function: SugarChainable]
   .....
   compact: [Function: compact],
....
>> [1,null,2,undefined,3].compact()

TypeError: [1,null,2,undefined,3].compact is not a function
    at repl:1:24
    at ContextifyScript.Script.runInThisContext (vm.js:23:33)
    at REPLServer.defaultEval (repl.js:339:29)
    at bound (domain.js:280:14)
    at REPLServer.runBound [as eval] (domain.js:293:12)
    at REPLServer.onLine (repl.js:536:10)
    at emitOne (events.js:101:20)
    at REPLServer.emit (events.js:191:7)
    at REPLServer.Interface._onLine (readline.js:241:10)
    at REPLServer.Interface._line (readline.js:590:8)

Есть идеи, что сейчас не так?

2 ответа

Решение

Согласно первой странице SugarJS:

Начиная с версии 2.0, собственное расширение стало доступным при поддержке двух новых способов взаимодействия с библиотекой. Сахар по-прежнему верит в безопасное расширение аборигенов, однако бывают случаи, когда это не подходит, и этот выбор теперь передается пользователю.

Так что вам либо нужно использовать цепочечный API-интерфейс Sugar:

var arr = new Sugar.Array([1,null,2,undefined,3]);
arr.compact();

Это может быть сделано в одну строку следующим образом:

(new Sugar.Array([1,null,2,undefined,3])).compact()

Или расширять туземцев:

Sugar.extend();

Хотя расширение может показаться более простым, есть причина, по которой он его создал, поэтому вам нужно включить эту функцию. Проще говоря, расширение прототипов опасно, поскольку несколько библиотек могут захотеть расширить одни и те же прототипы и вызвать коллизии в своих методах.

Чтобы использовать эти функции на нативных объектах, вам нужно вызвать:

Sugar.extend();

Больше здесь: https://sugarjs.com/quickstart/

Другие вопросы по тегам