2015-05-27 58 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);
并做相应的类允许它。