繁体   English   中英

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

[英]Evaluated function as an object property in 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 

我错过了什么?

这里:

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

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

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

你的第一次尝试失败的原因是this不是personthis是你当前范围内的任何东西。 可能是全局的,或者如果代码在函数内,则可能是其他东西。

这应该工作

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM