[英]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.