[英]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
不是person
, this
是你当前范围内的任何东西。 可能是全局的,或者如果代码在函数内,则可能是其他东西。
这应该工作
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.