Questions tagged «ecmascript-6»

ECMAScript规范的2015版本现已成为标准(ECMAScript 2015)。仅在问题专门与ECMAScript 2015中提供的新功能或技术更改有关的情况下使用此标记。

9
如何在React组件上设置组件默认道具
我使用下面的代码在React组件上设置默认道具,但它不起作用。在该render()方法中,我可以看到输出“ undefined props”已打印在浏览器控制台上。如何定义组件道具的默认值? export default class AddAddressComponent extends Component { render() { let {provinceList,cityList} = this.props if(cityList === undefined || provinceList === undefined){ console.log('undefined props') } ... } AddAddressComponent.contextTypes = { router: React.PropTypes.object.isRequired } AddAddressComponent.defaultProps = { cityList: [], provinceList: [], } AddAddressComponent.propTypes = { userInfo: React.PropTypes.object, cityList: PropTypes.array.isRequired, provinceList: …

19
ES6类多重继承
我已经在BabelJS和MDN(根本没有任何信息)上完成了大部分研究,但是请随时告诉我是否在寻找有关ES6 Spec的更多信息时不够谨慎。 我想知道ES6是否以与其他鸭子型语言相同的方式支持多重继承。例如,我可以做类似的事情: class Example extends ClassOne, ClassTwo { constructor() { } } 将多个类别扩展到新类别?如果是这样,相对于ClassOne,解释器会更喜欢ClassTwo的方法/属性吗?

9
您可以在箭头功能中绑定“ this”吗?
我已经在尝试ES6一段时间了,但是我遇到了一个小问题。 我真的很喜欢使用箭头功能,只要有可能,我都会使用它们。 但是,看来您无法绑定它们! 这是函数: var f = () => console.log(this); 这是我要将功能绑定到的对象: var o = {'a': 42}; 这就是我绑定的f方式o: var fBound = f.bind(o); 然后我可以打电话给fBound: fBound(); 哪个将输出此(o对象): {'a': 42} 凉!可爱!除非它不起作用。代替输出o对象,它输出window对象。 因此,我想知道:您可以绑定箭头功能吗?(如果是这样,如何?) 我已经在Google Chrome 48和Firefox 43中测试了上面的代码,结果是相同的。

8
Javascript ES6 / ES5在数组中查找并更改
我有一个对象数组。我想按某个字段查找,然后对其进行更改: var item = {...} var items = [{id:2}, {id:2}, {id:2}]; var foundItem = items.find(x => x.id == item.id); foundItem = item; 我希望它更改原始对象。怎么样?(我不在乎它是否也会在lodash中使用)

14
使用ES6语法和Babel扩展Javascript中的错误
我正在尝试使用ES6和Babel扩展Error。它没有解决。 class MyError extends Error { constructor(m) { super(m); } } var error = new Error("ll"); var myerror = new MyError("ll"); console.log(error.message) //shows up correctly console.log(myerror.message) //shows empty string 错误对象永远不会获得正确的消息集。 在Babel REPL中尝试。 现在,我已经看到了一些关于SO的解决方案(例如在这里),但是它们似乎都非常不属于ES6-y。如何以一种不错的ES6方式做到这一点?(在Babel工作)

6
在componentDidUpdate()内部的setState()
我正在编写一个脚本,该脚本根据下拉列表的高度和输入在屏幕上的位置将下拉列表移动到输入下方或上方。我也想将修改器设置为根据其方向下拉。但是setState在内部使用componentDidUpdate会产生无限循环(这很明显) 我已经找到了使用getDOMNode和直接将classname设置为下拉列表的解决方案,但是我觉得应该使用React工具有更好的解决方案。有谁能够帮我? 这是工作代码的一部分getDOMNode(略微忽略了定位逻辑,以简化代码) let SearchDropdown = React.createClass({ componentDidUpdate(params) { let el = this.getDOMNode(); el.classList.remove('dropDown-top'); if(needToMoveOnTop(el)) { el.top = newTopValue; el.right = newRightValue; el.classList.add('dropDown-top'); } }, render() { let dataFeed = this.props.dataFeed; return ( <DropDown > {dataFeed.map((data, i) => { return (<DropDownRow key={response.symbol} data={data}/>); })} </DropDown> ); } }); 这是带有setstate的代码(它创建一个无限循环) let …

3
如何在JavaScript中映射/减少/过滤Set?
有没有什么办法map/ reduce/ filter的/ etc Set中的JavaScript或者我会写我自己? 这是一些明智的Set.prototype扩展 Set.prototype.map = function map(f) { var newSet = new Set(); for (var v of this.values()) newSet.add(f(v)); return newSet; }; Set.prototype.reduce = function(f,initial) { var result = initial; for (var v of this) result = f(result, v); return result; }; Set.prototype.filter = function filter(f) { …

30
在我的React项目中获得“无法将类作为函数调用”
我正在尝试将React map组件添加到我的项目中,但是遇到错误。我使用Fullstack React的博客文章作为参考。我在google_map.js第83行中查找了引发错误的位置: function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 到目前为止,这是我的地图组件。当我注释掉第58-60行(最后三行)时,页面加载正常(没有地图)。编辑:我做了@Dmitriy Nevzorov建议的更改,它仍然给我相同的错误。 import React from 'react' import GoogleApiComponent from 'google-map-react' export class LocationsContainer extends React.Component { constructor() { super() } render() { const style = { width: …

17
如何使用ES6语法导入jquery?
我正在ES6通过babelTranspiler和preset-es2015插件以及semantic-ui样式使用(JavaScript)语法编写一个新应用程序。 index.js import * as stylesheet from '../assets/styles/app.scss'; import * as jquery2 from '../dist/scripts/jquery.min'; import * as jquery3 from '../node_modules/jquery/dist/jquery.min'; console.log($('my-app')); index.html <!DOCTYPE html> <html lang="fr"> <head> <body> <script src="dist/app.js"></script> </body> </html> 项目结构 . ├── app/ │ ├── index.js ├── assets/ ├── dist/ │ ├── scripts/ │ │ ├── jquery.min.js …

5
将jQuery $(this)与ES6箭头函数一起使用(词汇表this绑定)
将ES6箭头功能与词汇this绑定一起使用非常好。 但是,我刚才遇到一个问题,将它与典型的jQuery click绑定一起使用: class Game { foo() { self = this; this._pads.on('click', function() { if (self.go) { $(this).addClass('active'); } }); } } 改用箭头功能: class Game { foo() { this._pads.on('click', () => { if (this.go) { $(this).addClass('active'); } }); } } 然后$(this)转换为ES5(self = this)类型的关闭。 是否可以让Traceur忽略词法绑定的“ $(this)”?

18
ES6模板文字可以在运行时替换(或重用)吗?
tl; dr:是否可以制作可重用的模板文字? 我一直在尝试使用模板字面量,但我想我只是不明白,而现在却感到沮丧。我的意思是,我认为我明白了,但是“它”不应该是它的工作方式或应该如何得到。它应该变得不同。 我看到的所有示例(甚至是带标签的模板)都要求“替换”必须在声明时而不是在运行时完成,这对我来说对于模板似乎完全没有用。也许我疯了,但是对我来说,“模板”是一个包含令牌的文档,这些令牌在您使用时(而不是在创建时)会被替换,否则只是一个文档(即字符串)。模板与令牌一起存储为令牌,并且在您评估模板时会评估这些令牌。 每个人都举一个可怕的例子,类似于: var a = 'asd'; return `Worthless ${a}!` 很好,但是如果我已经知道了a,我会return 'Worthless asd'或return 'Worthless '+a。重点是什么?说真的 好吧,关键是懒惰。更少的优点,更多的可读性。大。但这不是模板!不是恕我直言。MHO至关重要!恕我直言,问题是模板在声明时就进行了评估,因此,如果这样做,恕我直言: var tpl = `My ${expletive} template`; function go() { return tpl; } go(); // SPACE-TIME ENDS! 由于expletive未声明,因此输出类似的信息My undefined template。超。实际上,至少在Chrome中,我什至无法声明模板;由于expletive未定义,因此将引发错误。我需要的是能够在声明模板后进行替换: var tpl = `My ${expletive} template`; function go() { return tpl; } var …

5
打字稿es6导入模块“文件不是模块错误”
我将打字稿1.6与es6模块语法一起使用。 我的文件是: test.ts: module App { export class SomeClass { getName(): string { return 'name'; } } } main.ts: import App from './test'; var a = new App.SomeClass(); 当我尝试编译main.ts文件时,出现此错误: 错误TS2306:文件'test.ts'不是一个模块。 我该怎么做?


8
如何将普通对象转换为ES6地图?
由于某种原因,我无法在MDN文档中找到这个简单的东西(也许我只是想念它)。 我希望这可以工作: const map = new Map({foo: 'bar'}); map.get('foo'); // 'bar' ...但是第一行抛出 TypeError: (var)[Symbol.iterator] is not a function 如何从普通对象制作地图?我真的必须首先将其转换为键值对数组的数组吗?

7
Home不包含名为Home的导出
我正在与之合作create-react-app,遇到了这个问题Home does not contain an export named Home。 这是我设置App.js文件的方式: import React, { Component } from 'react'; import logo from './logo.svg'; import './App.css'; import { Home } from './layouts/Home' class App extends Component { render() { return ( <div className="App"> Hello <Home /> </div> ) } } export default App; 现在在我的layouts文件夹中有Home.js文件。如下所示进行设置。 …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.