如何将对象属性从对象本身传递给函数?

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 对象的 idkey 属性,而不是返回具有相同字段的通用对象。

如果你以后想添加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 =newTool (123);
并做 class 允许的任何事情。