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

时间:2015-05-27 10:24:29

标签: javascript oop javascript-objects

我想将对象属性传递给全局函数,并希望将返回值保存在新的对象属性中。 我尝试了什么:

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);
}

3 个答案:

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

如果您想稍后添加类方法,您将看到优势。

假设你定义一个这样的方法:

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);
并做任何班级允许的事情。