我使用的是NodeJS v4.2.6,它有一个已知的Block-Scoped声明问题尚未得到支持。我被迫使用此版本,这意味着我必须使用"use strict";
行来避免此错误:
SyntaxError: Block-scoped declarations (let, const, function, class) not yet sup
ported outside strict mode
哪种方法很好,但是,我刚刚下载了一个NPM,其语法与我之前看不到的一样:
const request = require('request');
const qs = require('querystring');
const _ = require('underscore');
const crypto = require('crypto');
const Beautifier = require('./beautifier.js');
const assert = require('assert')
class MyClassTest {
constructor({ key, secret, recvWindow, timeout, disableBeautification }) {
this.key = key;
this.secret = secret;
this.recvWindow = recvWindow;
this.timeout = timeout || 15000;
this.disableBeautification = disableBeautification;
this._beautifier = new Beautifier();
this._baseUrl = `https://www.thisisatestlol.com/`;
}
}
我从未在函数的参数区域看到过对象或花括号。这是什么?
在看到我之前谈过的Block-scoped声明错误后,我添加了" use strict&#34 ;;这条线确实清除了消息,但现在显示了另一条消息。
constructor({ key, secret, recvWindow, timeout, disableBeautification }) {
^
SyntaxError: Unexpected token {
我从未处理过这个问题,我该如何修复它并使我的NPM顺利运行?
我添加了Block-scoped声明错误,因为我觉得它与它有关,也许我错了。
答案 0 :(得分:3)
这是ES6功能:"Object destructuring for function parameters"。
它将传入对象中的属性名称分配给与属性名称同名的函数参数。因此,key
与arguments[0].key
类似,secret
与arguments[0].secret
类似,依此类推。只需保存一些打字。
所以,这个:
constructor({ key, secret, recvWindow, timeout, disableBeautification }) {
this.key = key;
// ...
}
的工作原理如下:
constructor(obj) {
let key = obj.key;
let secret = obj.secret;
let recvWindow = obj.key;
let timeout = obj.timeout;
let disableBeautification = obj.disableBeautification;
this.key = key;
// ...
}
文章参考:
Destructing objects as function parameters in ES6
Use destructuring in function parameters
我从未处理过这个问题,我该如何修复它并使我的NPM顺利运行?
在节点v6之前,node.js中不支持破坏功能参数ES6功能的对象,因此如果您不能通过节点v4升级节点版本,则必须编辑代码如下:
constructor(obj) {
var key = obj.key;
var secret = obj.secret;
var recvWindow = obj.key;
var timeout = obj.timeout;
var disableBeautification = obj.disableBeautification;
this.key = key;
// ...
}
或者使用支持诸如babeljs等ES6功能的转换器,并将该模块转换为ES5代码。
我添加了Block-scoped声明错误,因为我觉得它与它有关,也许我错了。
它们是独立的ES6功能。您所使用的v4版本节点正在实现对块作用域let
的支持,因此您只能在strict
模式下使用它或使用命令行选项。
现在你知道调用了哪些这些功能,你可以在这个表中查找它们:http://node.green/以查看node.js的哪个版本支持什么。