的問題是,你正在嘗試引用您的對象與這個,雖然不存在了。該這個你可以參考不確定(如你的情況),然後導致錯誤「未定義無法讀取x屬性」。
但是,這個可能會根據情況綁定到上下文中的另一個對象。在這種情況下,你不會採取這種錯誤,無論值對應於綁定的對象將返回爲這。
試圖獲取從檢索值這個對象可能會導致2例,這兩者是不是你想要的東西。
- 檢索到的這有寬度和高度屬性,讓你的功能會得到這些值,並計算相應的結果。但是這些價值觀不會是你在對象中傳遞的價值觀。
- 檢索到的這沒有一個寬度或高度屬性,讓你的功能將得到不確定,因爲它的參數,並相應地給出錯誤。
有很多方法可以解決這個問題。這是我的主張:
這裏的主要問題是區域的值是在構建對象時急切計算的。凍結計算並在創建對象後觸發它將計算對象內的正確值。
// first the calculation function
const calculateArea = (height, width) => {
return height * width
}
// then the object itself...
const myObj = {
height: 20,
width: 10,
// init, is a function that uses bounded context's width, height
init: function() {
this.area = calculateArea(this.height, this.width);
delete this.init; // We don't want init in our result object
return this;
}
}.init();
現在,當我們調用對象的init(),我們將有我們的這指向正確的對象。它會用this.width和this.height來計算面積。它也將刪除結果對象中的init()函數,返回的對象作爲你想要的形式。
我們剛剛暫停計算一個步驟,讓我們的這個指向正確的上下文,然後繼續。
[對象字面聲明中的自引用]的可能重複(http://stackoverflow.com/questions/4616202/self-references-in-object-literal-declarations) – Li357
它需要在對象被調用後調用創建時,您仍然無法在定義對象屬性時引用它。 –
'常量MyObj中= { 高度:20, 寬度:10, 面積:功能(){ 返回this.height * this.width } }' – Smiranin