评估函数作为JavaScript中的对象属性

时间:2015-07-31 21:20:15

标签: javascript

我在JavaScript中定义了一个对象文字,但是当我尝试创建一个被调用函数的属性时,我收到Uncaught ReferenceError: xxx is not defined错误。

以下是一个例子:

var person = {
    name : 'Saucy Jack',

    convenienceHook : this.getName('some predefined string'),

    getName : function(string) {
        console.log(this.name + string);
    }
};

此错误说Uncaught ReferenceError: convenienceHook is not defined

如果我在对象定义之外分配属性,它也不起作用:

var person = {
    name : 'Saucy Jack',

    getName : function(string) {
        console.log(this.name + string);
    }
};

person.convenienceHook = person.getName('some predefined string');
person.convenienceHook(); //returns error 

我错过了什么?

4 个答案:

答案 0 :(得分:4)

下面:

var person = {
    name : 'Saucy Jack',

    convenienceHook : getname('some predefined string'),

    getName : function(string) {
        console.log(this.name + string);
    }
};

您正在调用一个名为getname的函数,该函数不存在。 getName不是person上的属性,因为getname('some predefined string')必须在对象存在之前进行评估,因为它是对象文字的一部分。即使它确实存在,你仍然无法将其称为裸getname,即使它确实存在,你也必须正确地将getName大写。

您的第二种方法也只是调用person.getName。看起来您想要创建另一个调用getName的函数:

var person = {
    name : 'Saucy Jack',

    convenienceHook : function() {
        return this.getName('some predefined string');
    },

    getName : function(string) {
        console.log(this.name + string);
    }
};

答案 1 :(得分:0)

你指定的不是函数,例如你需要从getName函数返回一个函数,所以convenienceHook将是一个函数:

getName : function() {
    return function() {
        console.log(this.name);
    };
}

答案 2 :(得分:0)

您首次尝试失败的原因是this不是person,而是您当前范围内的this。可能是全局的,或者如果代码在函数内,则可能是其他东西。

答案 3 :(得分:-1)

这应该有效

var person = {
name: "Saucy Jack", 
convenienceHook: function() { return this.getName("Predefined text") },
getName: function(string) { 
    string=string||"";
    return this.name + string; } 
}