2015-05-14 27 views
0

我是React.js的新手,並且發現了一個棘手的事情,那讓我困惑。在初始化時調用實例本身的函數

我想在創建該類的實例時使用類的一個函數,但似乎我無法做到這一點。

更具體:

我有一個叫PersonCalendar類,並在這個班,我有一個函數調用calculatedSalary也,在這個類中,我有一個名爲salary另一個屬性。

現在我想通過以下操作來創建這個類的一個實例:

var personCal = new PersonCalender({salary: personCal.calculatedSalary(138)}) 

我也試過這樣:

var personCal = new PersonCalender({salary: this.calculatedSalary(138)}) 

他們都不是工作。

當我執行代碼時,代碼將在此行停止,表示函數未定義。

任何人都可以給我一些建議,如何處理棘手的情況?

非常感謝

+0

在您的第一個代碼示例中,personCal.calculatedSalary(138)未定義,因爲personaCal對象尚不存在。 –

+0

嘗試'var personCal = new PersonCalender();'後面跟'personCal.salary = personCal.calculatedSalary(138);'。 –

回答

0

這與React無關。在存在之前,您根本無法訪問它。因此,在實例存在之前,您無法訪問實例的功能。

我不知道是什麼PersonCalender正在做或者你是如何處理它的參數,但它好像你要計算內部工資構造:

function PersonCalender(someNumber) { 
    this.salary = this.calculatedSalary(someNumber); 
} 

或者使calculatedSalary靜態的,如果它確實需要訪問實例:

PersonCalender.calculatedSalary = function(...) { ...}; 

var personCal = new PersonCalender({salary: PersonCalender.calculatedSalary(138)}) 

我推薦閱讀MDN article about OOP in JS以使您更熟悉此主題。

0

的2線接錯了2個不同的原因:

  1. var personCal = new PersonCalender({salary: personCal.calculatedSalary(138)})是行不通的,因爲personCalundefined在這個時候。只有在執行該行後纔會有任何值
  2. var personCal = new PersonCalender({salary: this.calculatedSalary(138)})可能不起作用,因爲this不是PersonCalendar,並且沒有calculatedSalary方法。

你應該改變你的構造函數來接收一個參數集合salary裏面。

0

假設PersonCalendar是一個陣營組件:你應該通過工資的組成部分作出反應,並做計算內部:

var personCal = new PersonCalender({salary: 138}); 

var PersonCalendar = React.createClass({ 
    componentDidMount: function() { 
     this.setState({ 
     computedSalary: this.calculatedSalary(this.props.salary) 
     }); 
    }, 
    render: function() { 
    ... use this.state.computedSalary 
    } 
}); 

其他人已經指出,你不能一個不存在的對象上訪問屬性。