不能使用sugar.js函数

时间:2017-09-17 20:09:20

标签: javascript node.js sugar.js

我尝试使用sugar。以前我在一年前使用它,它以这样的方式运作良好:

> 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 个答案:

答案 0 :(得分:2)

要在本机对象上使用这些函数,您需要调用:

Sugar.extend();

更多信息:https://sugarjs.com/quickstart/

答案 1 :(得分:1)

根据SugarJS front page

  

从v2.0开始,原生扩展已成为选择加入,同时支持两种与库交互的新方式。 Sugar仍然相信本机的安全扩展,但有时候这是不合适的,现在这个选择掌握在用户手中。

因此您需要使用可链接的Sugar API:

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

这可以像这样制作一个单行:

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

或扩展原生代:

Sugar.extend();

虽然扩展可能看起来更简单,但他们构建它的原因是您需要选择加入此功能。简单地说,扩展原型是危险的,因为多个库可能希望扩展相同的原型并且会导致其方法中的冲突。