有没有办法取消ES7异步功能?
在这个例子中,单击时,我想在调用new之前中止异步函数调用.
async function draw(){
for(;;){
drawRandomRectOnCanvas();
await sleep(100);
}
}
function sleep(t){
return new Promise(cb=>setTimeout(cb,t));
}
let asyncCall;
window.addEventListener('click', function(){
if(asyncCall)
asyncCall.abort(); // this dont works
clearCanvas();
asyncCall = draw();
});
Run Code Online (Sandbox Code Playgroud) 有时(尽管很少)你需要扩展,而不是覆盖父静态属性,例如下面的(非常蹩脚)示例:
class Person {
static coreStats = {
role: "slacker",
weapon: null,
speed: 4,
vechicle: "roller blades",
};
}
class Ninja extends Person {
static coreStats = {
role: "silent assassin",
weapon: "katana",
speed: 99,
};
}
console.log(Ninja.coreStats); // But vechicle is no more
Run Code Online (Sandbox Code Playgroud)
如何在不破坏父属性的情况下扩展子类中的静态属性?
我使用 typescript 和 webpack 将 ES+ 代码编译为 ES5,每个模块都包含在其自己的输出包中。
例如:
class User {} = 1.js
class Table {} = 2.js
Run Code Online (Sandbox Code Playgroud)
在查看输出时,我注意到捆绑包中存在重复的函数,例如:
__decorate
__awaiter
__generator
Run Code Online (Sandbox Code Playgroud)
这些显然是从转译到 ES5 的帮助者,有什么方法可以将它们移动到共享包中以减少重复吗?
我需要来自两个库的Tooltip组件.例如
import { Tooltip } from "react-leaflet";
import { Tooltip } from "recharts";
Run Code Online (Sandbox Code Playgroud)
但两个库的Tooltip名称相同,我收到错误.如何导入Tooltip没有错误.
我有一个包含以下代码的文件:
class Animal {
doSomething = () => {
return 'Hi.';
};
}
class Dog extends Animal {
doSomething = () => {
return super.doSomething() + ' Woof!';
};
}
console.log(new Dog().doSomething());Run Code Online (Sandbox Code Playgroud)
注意:尝试运行上面的代码片段可能不起作用,因为我不知道如何让它使用我的 Babal 设置。
无论如何,当我使用 Babel 编译它并在 Node 中运行它时,我收到以下错误:
/Users/elias/src/classFieldTest/build/classFieldTest.js:15
return super.doSomething() + ' Woof!';
^
TypeError: (intermediate value).doSomething is not a function
at Dog.doSomething (/Users/elias/src/classFieldTest/build/classFieldTest.js:15:26)
at Object.<anonymous> (/Users/elias/src/classFieldTest/build/classFieldTest.js:21:23)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Function.Module.runMain (module.js:693:10)
at startup …Run Code Online (Sandbox Code Playgroud) javascript babeljs arrow-functions ecmascript-next class-fields
我想在我的Sapper项目中使用类属性和私有字段。显然,它们现在必须由babel进行预处理。
我试图将相应的babel插件添加到rollup.config.js中,只是为了实现一些目的。
我试图将babel汇总插件添加到这样的服务器插件的末尾,
babel({
extensions: ['.js', '.mjs', '.html', '.svelte'],
runtimeHelpers: true,
exclude: ['node_modules/@babel/**'],
plugins: [
'@babel/plugin-proposal-class-properties',
'@babel/plugin-proposal-private-methods',
],
}),
Run Code Online (Sandbox Code Playgroud)
但这似乎根本没有生效。
我也将其添加到客户端插件中(在旧版条目之前),但是它抱怨我需要添加@babel/plugin-syntax-dynamic-import,因此babel似乎必须识别整个语法才能进行预处理,而且我真的不想编译动态导入适用于现代浏览器。
如何在sapper中启用esnext语法?
String.raw可用于创建包含反斜杠的字符串,而不必将这些反斜杠加倍。
从历史上看,您需要在创建字符串时将反斜杠加倍:
let str = "C:\\Program Files\\7-Zip";
console.log(str);Run Code Online (Sandbox Code Playgroud)
String.raw 允许您的代码显示没有双反斜杠的路径:
let str = String.raw`C:\Program Files\7-Zip`;
console.log(str);Run Code Online (Sandbox Code Playgroud)
上面的代码工作正常,但今天我发现如果原始字符串以反斜杠结尾,它就不起作用:
let str = String.raw`Can't End Raw With Backslash\`;
console.log(str);Run Code Online (Sandbox Code Playgroud)
上面的代码段产生了这个错误:
{
"message": "SyntaxError: `` literal not terminated before end of script",
"filename": "https://stacksnippets.net/js",
"lineno": 14,
"colno": 4
}
Run Code Online (Sandbox Code Playgroud)
为什么这是一个例外?
我在代码中有一个 if 语句,它检查是否定义了一个对象,然后检查其属性之一的相等性。我的 if 语句是这样的:
if(obj && obj.a !== x) { // do something }
Run Code Online (Sandbox Code Playgroud)
但是现在我使用了可选链接并将 if 语句更改为:
if(obj?.a !== x) { // do something }
Run Code Online (Sandbox Code Playgroud)
但是现在我的代码在这种情况下无法正常工作。即使 obj 未定义,代码也会输入 if 语句。请有人解释为什么会发生这种情况?
当我运行这段代码时:
'use strict';
class Base {
constructor() {
this._public();
}
}
class Child extends Base {
constructor() {
super();
}
_public() {
this.#privateMethod();
}
#privateMethod() {
this.bar = 1234;
}
}
const c = new Child();
console.log(c.bar);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
this.#privateMethod();
^
TypeError: Receiver must be an instance of class Child
Run Code Online (Sandbox Code Playgroud)
据我了解 JavaScript,以下代码中的接收者正是 Child 类的一个实例。它甚至显示在开发工具检查器中:
那么有人可以向我解释一下发生了什么事吗?这是一个错误还是什么?
实际上FF显示了更准确的错误信息:
Uncaught TypeError: can't access private field or method: object is not the right class
Run Code Online (Sandbox Code Playgroud) 我正在努力使用async/await并从Promise返回一个值.
function test () {
return new Promise((resolve, reject) => {
resolve('Hello')
})
}
async function c() {
await test()
}
Run Code Online (Sandbox Code Playgroud)
据我所知,我应该能够通过以下方式获得价值:
console.log(c())
Run Code Online (Sandbox Code Playgroud)
但显然我在这里错过了一点,因为这会回报一个承诺.不应该打印"你好"吗?在类似的说明中,我不清楚回调是否需要在将其包装在async/await之前转换为promise?
ecmascript-next ×10
javascript ×7
babeljs ×2
node.js ×2
promise ×2
async-await ×1
cancellation ×1
class-fields ×1
ecmascript-6 ×1
es6-promise ×1
inheritance ×1
oop ×1
reactjs ×1
sapper ×1
svelte ×1
typeerror ×1
typescript ×1
webpack ×1