2016-07-31 54 views
0

React-ecma6 dosent似乎允許定義沒有setter的getter 有沒有一種方法來定義一個只有getter的方法和通過任何其他方法更改值?定義getter沒有setter ecma6 - 反應

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(); 

Uncaught TypeError: Cannot set property is_on of #GetterOnly which has only a getter

patchProperty @ makeAssimilatePrototype.js:21 (anonymous function) @ makeAssimilatePrototype.js:52 (anonymous function) @ makeAssimilatePrototype.js:51 reconcileWithStoredPrototypes @ makeAssimilatePrototype.js:50 assimilatePrototype @ makeAssimilatePrototype.js:63 patchReactClass @ makePatchReactClass.js:40 makeHot @ makeMakeHot.js:33 makeExportsHot @ makeExportsHot.js:44 (anonymous function) @ GetterOnly.js:139 (anonymous function) @ GetterOnly.js:139 (anonymous function) @ GetterOnly.js:140 (anonymous function) @ app.js:5062 webpack_require @ app.js:556 fn @ app.js:87 (anonymous function) @ page.js:35 (anonymous function) @ page.js:81 (anonymous function) @ page.js:82 (anonymous function) @ app.js:5056 webpack_require @ app.js:556 fn @ app.js:87 (anonymous function) @ Routes.js:19 (anonymous function) @ Routes.js:52 (anonymous function) @ Routes.js:53 (anonymous function) @ app.js:4438 webpack_require @ app.js:556 fn @ app.js:87 (anonymous function) @ makoVOD.js:19 (anonymous function) @ makoVOD.js:62 (anonymous function) @ makoVOD.js:63 (anonymous function) @ app.js:1042 webpack_require @ app.js:556 fn @ app.js:87 (anonymous function) @ multi_main:3 (anonymous function) @ app.js:586 webpack_require @ app.js:556 (anonymous function) @ app.js:579 (anonymous function) @ app.js:582

+2

不,它是允許的 - 這不是語法錯誤。你得到的錯誤信息表明某些東西試圖分配給'.is_on',這會在沒有setter的情況下拋出異常。檢查錯誤的堆棧跟蹤以查看它來自哪裏。 – Bergi

+0

這是代碼的簡化版本,它仍然顯示一個錯誤: 'import從'react'反應; class GetterOnly extends React.Component構造函數(道具){ \t \t super(props); \t \t}; \t \t get is_on(){ \t \t return this._is_on; \t}; (){ \t}; } 導出默認GetterOnly' –

+0

這似乎是導入/導出模塊 –

回答

-4

的問題是,你調用on的功能。吸氣劑使得整機看起來像函數的性質:

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; 

現在沒有人,但類可以編輯變量。

+1

'on'確實是方法,應該被調用。 'let _is_on = false;'將在所有實例之間共享這個標誌。 –