我在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
我错过了什么?
答案 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; }
}