2012-10-11 21 views
0

我想設置一個JavaScript對象,其中的一個項目是一個函數。我正在做一些自我引用,但它不起作用。自引用對象在JavaScript函數中如何工作?

var onTimePoints = function($a, $b, $c, $lifeotr){ 

    $var1 = ($b - $a)/$c; 
    $var2 = ($lifeotr - $a)/$var1; 
    if($var2>$c) 
    { 
    $var2 = $c; 
    } 
    if($var2<0) 
    { 
    $var2 = 0; 
    } 
    $var2 = Math.round($var2); 
    return $var2; 
} 
var lifeData ={ 
     min: 25000, 
     max: 65000, 
     otr: 56426, 
     maxPoints:100, 
     otp: onTimePoints(25000, 65000, 100, 56426), 
     test: function(){ 
     alert(this.min); 
     } 
} 

當我做conosle.log(lifeData.otp)它的作品。

當我用this.minthis.max等替換硬編碼的數字時,它不起作用。

這裏是什麼行不通的例子:

var lifeData ={ 
    min: 25000, 
    max: 65000, 
    otr: 56426, 
    maxPoints:100, 
    otp: onTimePoints(this.min, this.max, this.maxPoints, this.otr), 
    test: function(){ 
    alert(this.min); 
    } 
} 

在這種情況下console.log(lifeData.otp)回報NaN

我相信我只是俯視一些東西。欣賞如果你知道這個問題。

+3

我刪除了原來的意見,但後來我意識到,我是正確的:-)值'this'並沒有任何關係做一個在建的對象字面值。它只能完成函數調用上下文。基本上沒有直接的方法來做你在JavaScript中做的事情。你必須使用一個單獨的聲明。 – Pointy

+0

當我警告this.min它警告25000.我假設this.min是一樣的說lifeData.min –

+0

'this'是'window',而不是'lifeData'。 – jbabey

回答

1

你不能做你想做的事情。

考慮:

var lifeData ={ 
    min: 25000, 
    max: 65000, 
    otr: 56426, 
    maxPoints:100, 
    otp: onTimePoints(25000, 65000, 100, 56426), 
    otNewcomm: formula, 
    test: function(){ 
    alert(this.min); 
    } 
} 

var min = 25000; 
var max = 65000; 
var otr = 56426; 
var maxPoints = 100; 
var lifeData ={ 
    min: min, 
    max: max, 
    otr: otr, 
    maxPoints: maxPoints, 
    otp: onTimePoints(min, max, maxPoints, otr), 
    otNewcomm: formula, 
    test: function(){ 
    alert(this.min); 
    } 
} 

function lifeData(min, max, otr, maxPoints) 
{ 
    this.min = min; 
    this.max = max; 
    this.otr = otr; 
    this.maxPoints = maxPoints; 
    this.otp = onTimePoints(min, max, maxPoints, otr); 
    ... 
} 
var lifeDataInstance = new lifeData(25000, 65000, 56426, 100); 
+1

或者可能「otp」屬性可能是一個函數包裝器, onTimePoints」。 – Pointy

+1

最後一塊是我正在使用的,因爲每當事件被觸發時我將創建一個新實例。用正確的數字刷新視圖。看起來像最好的解決方案。 –

5

你會得到很多的教程,瞭解這一點,但在這裏我想說明它使用幾行代碼。在Firebug控制檯或Chrome控制檯執行以下操作

  1. 進入this,然後按回車

    >窗口 //現在是全球範圍內

  2. 運行下面的代碼

    this.a = 500; 
    this.b = 600; 
    
  3. 現在運行下面的代碼;

    var MyObject = { 
        a: 20, 
        b: 40, 
        sum: this.a + this.b, 
        getSum: function(){ 
         return this.a + this.b; 
        } 
    } 
    
  4. 現在運行以下

    MyObject.sum 
    

    > 1100 //因爲MyObect在全球範圍內,並在表達sum:this.a+this.bthis聲明被Window對象。所以sum: 400 + 500

  5. 現在運行

    MyObject.getSum(); 
    

    > 60 //因爲getSumMyObject的方法。並且在getSumthis內部調用如MyObject.getSum()時將爲MyObject。所以它返回20 + 40

+1

小修正。它不應該是900應該是1100'500 + 600'。 – Amareswar

+0

謝謝。最初是500,400 :) – Diode

相關問題