如何将对象属性从对象本身传递给函数?
How to pass object properties to a function from object itself?
我想将对象 属性 传递给全局函数,并想将 return 值保存在新对象 属性 中。
我尝试了什么:
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);
}
您正在尝试未初始化 属性 对象 (id)。在创建它的工具对象 id 属性 时尚未设置,这就是你在那里变得未定义的原因。
您应该将 Id 存储在变量中并传递给您的函数和 属性,或者创建一个 class 工具然后将 Id 传递给构造函数。
var Tool = function(id) {
return { id: id, key: myFunc(id) };
}
var myTool = Tool(55);
myTool.key // will return 55
这就是您可能想要做的:
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 以了解更多信息
注意我去掉了tools中的大写字母'T':因为它不是一个应该用作构造函数的函数,所以它不应该以大写字母开头。
我假设您不想在每次访问时都重新计算密钥,因此 get
解决方案对我来说似乎有点低效。
第二种解决方案避免了不必要的计算,但没有充分利用对象机制。
我宁愿做这样的事情:
var Tool = function (id) {
this.id = id;
this.key = myFunc (id);
return this;
}
通过这种方式,您实际上创建了 Tool
对象的 id
和 key
属性,而不是返回具有相同字段的通用对象。
如果你以后想添加class方法,你会看到好处。
假设您定义这样的方法:
Tool.prototype.getCash = function (sum) {
if (!checkKey (this.key)) callTheCops();
return sum;
}
如果您使用 returns 未命名结构的构造函数创建 Tool
实例,例如
{ id: id , key: myFunc(key) };
类似
var tool = Tool (123);
,
tool
变量不会继承 getCash()
方法,您将被困在一个对获取现金一无所知的结构中。
使用上述构造函数,您可以创建一个 class 实例,如下所示:
var tool =
new
Tool (123);
并做 class 允许的任何事情。
我想将对象 属性 传递给全局函数,并想将 return 值保存在新对象 属性 中。 我尝试了什么:
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);
}
您正在尝试未初始化 属性 对象 (id)。在创建它的工具对象 id 属性 时尚未设置,这就是你在那里变得未定义的原因。
您应该将 Id 存储在变量中并传递给您的函数和 属性,或者创建一个 class 工具然后将 Id 传递给构造函数。
var Tool = function(id) {
return { id: id, key: myFunc(id) };
}
var myTool = Tool(55);
myTool.key // will return 55
这就是您可能想要做的:
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 以了解更多信息
注意我去掉了tools中的大写字母'T':因为它不是一个应该用作构造函数的函数,所以它不应该以大写字母开头。
我假设您不想在每次访问时都重新计算密钥,因此 get
解决方案对我来说似乎有点低效。
第二种解决方案避免了不必要的计算,但没有充分利用对象机制。
我宁愿做这样的事情:
var Tool = function (id) {
this.id = id;
this.key = myFunc (id);
return this;
}
通过这种方式,您实际上创建了 Tool
对象的 id
和 key
属性,而不是返回具有相同字段的通用对象。
如果你以后想添加class方法,你会看到好处。
假设您定义这样的方法:
Tool.prototype.getCash = function (sum) {
if (!checkKey (this.key)) callTheCops();
return sum;
}
如果您使用 returns 未命名结构的构造函数创建 Tool
实例,例如
{ id: id , key: myFunc(key) };
类似
var tool = Tool (123);
,
tool
变量不会继承 getCash()
方法,您将被困在一个对获取现金一无所知的结构中。
使用上述构造函数,您可以创建一个 class 实例,如下所示:
var tool =
new
Tool (123);
并做 class 允许的任何事情。