2014-07-03 53 views
0

我有一個這樣的對象:的JavaScript:在對象存儲功能,但執行它在本地環境

objectx = { 
    1: { 
     name: "first", 
     loadFunction: function() { 
      $(target).load("http://stackoverflow.com #question", function() { 
       // do something else 
      }); 
     } 
    }, 
    2: { 
     name: "second", 
     loadFunction: function() { 
      $(target).load("http://stackoverflow.com #answer", function() { 
       // do something else 
      }); 
     } 
    } 
} 

當我打電話與目標x [1] .loadFunction()的功能,他們不有當地的情況下,所以我將不得不通過一切作爲參數或使我的變量全球。例如:

function doSomething() { 
    var target; // this variable holds a reference to a DOM object 

    objectx[1].loadFunction() 
} 

目標沒有定義

如何執行功能,使他們知道他們是從稱爲上下文的?

回答

1

這在JavaScript中是不可能的。 JS使用詞法scoping。你似乎在尋找的是動態範圍。

您可以做的最好的方法是傳遞參數,在範圍中定義它,或使用全局變量(小於推薦值)。

2

由於詞法範圍在JavaScript中的工作方式,這是不可能的(您這樣做的方式)。

你想要一個函數參數,很簡單。無論如何,依賴於全局狀態的寫函數都是糟糕的風格。

var objectx = { 
    1: { 
     name: "first", 
     loadFunction: function(target) { 
      $(target).load("http://stackoverflow.com #question", function() { 
       // do something else 
      }); 
     } 
    } 
} 

function doSomething() { 
    var target; // this variable holds a reference to a DOM object 

    objectx[1].loadFunction(target); 
} 

完成。

+0

這就是我現在這樣做的,但它需要太多的參數,並且使程序的未來更改變得困難。 – user3653087

+1

然後你的程序結構很差,需要改進。具有很多參數的函數也是不好的風格。將這些論點外化爲某種全球狀態並不是解決這個問題的辦法。如果你解釋你實際上*正在嘗試做什麼,我可能會建議改進。 – Tomalak

+0

我在我的網站上有幾個元素。程序隨機選擇一個,根據存儲在對象中的信息查找合適的替換並更改內容。背景(彩色),文本等。然後通過代理獲取外部內容,對其進行格式化並將其放置在元素內的div中。對於抓取和格式化,我使用了這些函數,因爲它們需要針對每個對象都有所不同,因此我將它們與對象一起存儲起來是有意義的。 – user3653087

相關問題