定义没有setter的getter ecma6 - react

时间:2016-07-31 15:13:07

标签: class reactjs compiler-errors ecmascript-6 getter-setter

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

2 个答案:

答案 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;

现在没有人可以编辑变量。