我想将对象属性传递给全局函数,并希望将返回值保存在新的对象属性中。 我尝试了什么:
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);
}
答案 0 :(得分:2)
这是您可能想要做的事情:
var tools = {
id: 7,
get key() {
var key = 'Key is ' + this.id; // Do something with this.id
return key;
},
};
tools.key; // "Key is 7"
您应该阅读MDN以了解并了解更多
请注意,我删除了首都' T'来自工具:因为它不是一个应该用作构造函数的函数,所以它不应该以大写字母开头。
答案 1 :(得分:1)
您正试图获取对象(id)的未初始化属性。在创建Tools对象时,它的属性尚未设置,这就是你在那里得到未定义的原因。
您应该将Id存储在变量中并传递给您的函数和属性,或者创建一个类Tools,然后将Id传递给构造函数。
{{1}}
答案 2 :(得分:0)
我假设您不希望每次访问时都重新计算密钥,因此get
解决方案对我来说似乎效率低下。
第二种解决方案避免了不必要的计算,但没有充分利用对象机制。
我宁愿做这样的事情:
var Tool = function (id) {
this.id = id;
this.key = myFunc (id);
return this;
}
这样您实际上可以创建id
对象的key
和Tool
属性,而不是返回具有相同字段的通用对象。
如果您想稍后添加类方法,您将看到优势。
假设你定义一个这样的方法:
Tool.prototype.getCash = function (sum) {
if (!checkKey (this.key)) callTheCops();
return sum;
}
如果使用构造函数创建Tool
实例,该构造函数返回一个未命名的结构,如
{ id: id , key: myFunc(key) };
像是一样的东西
var tool = Tool (123);
,
tool
变量不会继承getCash()
方法,你会遇到一个对获取现金一无所知的结构。
使用上面的构造函数,您可以创建一个类实例,如下所示:
var tool =
的 new
强> Tool (123);
并做任何班级允许的事情。