2015-05-27 62 views
0

我想將對象屬性傳遞給全局函數,並希望將返回值保存在新的對象屬性中。 我的嘗試:如何將對象屬性從對象本身傳遞給函數?

var Tools = { 
    id : "tools" , 
    key : myfunc(this.id)  //I also tried Tools["id"] and id . 
}; 

下面是函數:

function myfunc(tmp){ 
    return tmp; 
} 

我想用Tools.key沒有Tools.key()這就是爲什麼我不使用下面的代碼:

key : function(){ 
    return myfunc(this.id); 
} 

回答

2

這是你可能想要做什麼:

​​

你應該閱讀MDN學習和了解更多

注意,我刪除從工具首都「T」:因爲它不是一個應該用作構造函數的函數,它不應該以大寫字母開頭。

+0

這不會很方便,除非'tools'是一個獨特的實例,在這種情況下,您可以設置'tool.id'並且一次性計算密鑰。 –

1

你」重新嘗試獲取對象(id)的未初始化屬性。在創建工具對象的時候,它的id屬性還沒有設置,這就是爲什麼你在那裏沒有定義。

你應該在變量中存儲Id並傳遞給你的函數和屬性,或者創建一個類Tools並將Id傳遞給構造函數。

var Tool = function(id) { 
    return { id: id, key: myFunc(id) }; 
} 
var myTool = Tool(55); 
myTool.key // will return 55 
0

我假設您不想在每次訪問時重新計算密鑰,所以get解決方案對我來說似乎有點低效。

第二種解決方案避免了不必要的計算,但沒有充分利用對象機制。

我寧願做這樣的事情:

var Tool = function (id) { 
    this.id = id; 
    this.key = myFunc (id); 
    return this; 
} 

這樣你實際上做的,而不是具有相同的字段返回一個通用對象的Tool對象的idkey屬性。

如果您想稍後添加類方法,您將看到優勢。

假設你定義這樣的方法:如果你使用一個構造函數返回一個未命名的結構是怎樣的
{ id: id , key: myFunc(key) };
喜歡的東西
var tool = Tool (123);
tool創建Tool實例

Tool.prototype.getCash = function (sum) { 
    if (!checkKey (this.key)) callTheCops(); 
    return sum; 
} 

變量不會繼承getCash()方法,並且您將陷入一個不知道獲取現金的結構。

通過上述構造,可以像這樣創建一個類的實例:
var tool =newTool (123);
並做相應的類允許它。