2016-12-12 13 views
1

関数定義が見つからないというタイプエラーが発生しました。
コードは以下のようになります。未知TypeError:this._isDateTypeは関数ではありません

return BaseController.extend("ch.micarna.weightprotocol.controller.Calendar", { 

    onInit: function() { 

     console.log(this._isDateType(new Date())); 

     let oHbox = this.byId("calendar-container"); 

     let oTodayDate = new Date(); 
     let oEndDate = this._getLastDayOfMonth(oTodayDate); 

    }, 

    _getLastDayOfMonth: (oBegin) => { 

     if (this._isDateType(oBegin)) { 
     throw new TypeError("The given parameter is not type of date."); 
     } 
     return new Date(oBegin.getFullYear(), oBegin.getMonth() + 1, 0); 
    }, 

    _isDateType: (oDate) => { 
     return Object.prototype.toString.call(oDate) === "[object Date]"; 
    }, 

    }); 

問題が_getLastDayOfMonth関数内で呼び出されたとき、見つかりませんでした_isDateType機能、です。 私は、ブレークポイントを設定:

enter image description here

をし、関数が定義されていない、あなたが見ることができるように私は理由を知りません。 onInit関数の先頭で

は、私が_isDateType関数と呼ば:

console.log(this._isDateType(new Date())); 

をし、期待どおりに結果を供給しています。

enter image description here enter image description here

私が間違って何をしているのですか?

答えて

0

できないことは、オブジェクトリテラル構文の他の場所にある「構成中」オブジェクトのプロパティを参照することです。それをしたい場合は、1つ以上の別の代入文が必要です。たとえば、次のようにコードを移動

を:

var temp = BaseController.extend("ch.micarna.weightprotocol.controller.Calendar", { 

onInit: function() { 

    console.log(this._isDateType(new Date())); 

    let oHbox = this.byId("calendar-container"); 

    let oTodayDate = new Date(); 
    let oEndDate = this._getLastDayOfMonth(oTodayDate); 

} 

}); 

temp._isDateType = (oDate) => { 
    return Object.prototype.toString.call(oDate) === "[object Date]"; 
}; 

temp._getLastDayOfMonth = (oBegin) => { 

    if (this._isDateType(oBegin)) { 
    throw new TypeError("The given parameter is not type of date."); 
    } 
    return new Date(oBegin.getFullYear(), oBegin.getMonth() + 1, 0); 
} 

return temp; 

をアイデアはいくつかの文に機能の割り当てを分割することです。

0

要素は、要素の一時的な値を取得する関数内で使用できます。 _isDateTypeメソッドを使用するには、メソッド内に属性を作成し、 'this'値で入力する必要があります。

return BaseController.extend("ch.micarna.weightprotocol.controller.Calendar", { 
var temp= null; 
onInit: function() { 
    temp = this; 
    console.log(temp._isDateType(new Date())); 

    let oHbox = temp.byId("calendar-container"); 

    let oTodayDate = new Date(); 
    let oEndDate = temp._getLastDayOfMonth(oTodayDate); 

}, 

_getLastDayOfMonth: (oBegin) => { 

    if (temp._isDateType(oBegin)) { 
    throw new TypeError("The given parameter is not type of date."); 
    } 
    return new Date(oBegin.getFullYear(), oBegin.getMonth() + 1, 0); 
}, 

_isDateType: (oDate) => { 
    return Object.prototype.toString.call(oDate) === "[object Date]"; 
} 
+0

「this」はjavascriptで配線されています。 –

関連する問題