【发布时间】:2017-03-04 06:34:30
【问题描述】:
在类中定义方法似乎有两种不同的方式。
class Foo {
handleClick = e => {
// handle click
}
// and
handleHover(e) {
// handle hover
}
}
我的问题是这两者有什么区别?
在编译时,它们会给出截然不同的结果:
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var Foo = function () {
function Foo() {
_classCallCheck(this, Foo);
this.handleClick = function (e) {}
// handle click
// and
;
}
_createClass(Foo, [{
key: "handleHover",
value: function handleHover(e) {
// handle hover
}
}]);
return Foo;
}();
但我似乎无法辨别其中的差异。是绑定问题吗?
谢谢!
【问题讨论】:
-
只是箭头函数和函数表达式的区别。方法语法只是函数表达式的语法糖。
-
知道了。谢谢!
-
我重新打开了这个问题,因为副本在这里并不真正适用。请注意,您的代码不是有效的 ES6。它使用了 ES 未来版本的功能提议。
标签: javascript ecmascript-6 ecmascript-next