React-ecma6 dosent似乎允许定义没有二传手的吸气剂 有没有办法定义一个getter only方法并通过任何其他方法更改值?
import React from 'react';
export default class GetterOnly extends React.Component {
constructor(props) {
super(props);
this._is_on = false;
}
on() {
this._is_on = true;
}
get is_on() {
return this._is_on;
}
render() {
}
}
var _getter = new GetterOnly()
_getter.on();
未捕获的TypeError:无法设置#GetterOnly的属性is_on 它只有一个吸气剂
patchProperty @ makeAssimilatePrototype.js:21(匿名 函数)@ makeAssimilatePrototype.js:52(匿名 函数)@ makeAssimilatePrototype.js:51 reconcileWithStoredPrototypes @ makeAssimilatePrototype.js:50 assimilatePrototype @ makeAssimilatePrototype.js:63 patchReactClass @ makePatchReactClass.js:40 makeHot @ makeMakeHot.js:33 makeExportsHot @ makeExportsHot.js:44 (匿名函数)@ GetterOnly.js:139(匿名 函数)@ GetterOnly.js:139(匿名函数)@ GetterOnly.js:140 (匿名函数)@ app.js:5062 webpack_require @ app.js:556 fn @ app.js:87(匿名函数)@ page.js:35(匿名函数)@ page.js:81(匿名 函数)@ page.js:82(匿名函数)@ app.js:5056 webpack_require @ app.js:556 fn @ app.js:87(匿名函数)@ Routes.js:19(匿名函数)@ Routes.js:52 (匿名函数)@ Routes.js:53(匿名函数)@ app.js:4438 webpack_require @ app.js:556 fn @ app.js:87(匿名函数)@ makoVOD.js:19(匿名函数)@makoVOD.js:62 (匿名函数)@ makoVOD.js:63(匿名 功能)@ app.js:1042 webpack_require @ app.js:556 fn @ app.js:87(匿名函数)@ multi_main:3(匿名函数)@ app.js:586 webpack_require @ app.js:556(匿名函数)@ app.js:579(匿名函数)@ app.js:582
答案 0 :(得分:0)
问题依旧是React / Es6的可靠性。它似乎来自nodejs - webpack.hot ...模块,我曾经用它来自动转换代码。 我升级到了vesion:2.0.0-alpha,错误消失了。 它的一个已知问题 - https://github.com/gaearon/react-hot-loader/issues/131
答案 1 :(得分:-4)
问题在于您将on
称为函数。 getter使函数看起来像属性:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get
所以最后一行应该是_getter.on
而不是_getter.on()
。
另外,要将_is_on
变量设为私有,您可以在类之外定义它,如下所示:
import React from 'react';
let _is_on = false;
export default class GetterOnly extends React.Component {
constructor(props) {
super(props);
}
on() {
_is_on = true;
}
get is_on() {
return _is_on;
}
render() {
}
}
var _getter = new GetterOnly()
_getter.on;
现在没有人可以编辑变量。