簡體   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