簡體   English   中英

javascript'function'/ object中的成員函數表示它不是函數

[英]member function in javascript 'function'/object is saying it is not a function

我正在嘗試使用允許print()的在線環境來復習一些基本的Javascript。 但是,當我嘗試在一個人的實例上調用say()時,它說的是“ say”不是一個函數。 我已經在幾種不同的環境中用他們的print版本(無論是writeln,console.log或其他版本)嘗試了這一點,並且總是說這不是一個功能。

//JavaScript-C24.2.0 (SpiderMonkey)

print("Hello, world!")

function person(name, age) {
    this.name = name;
    this.age = age;
    this.say = function () {
        print(this.name);
    }
}

var arrayz = [];

arrayz.push(person("bob",20));
arrayz.push(person("sally",19));
arrayz.push(person("joe",22));

for (var z in arrayz) {
       z.say();
}

我這樣做的方式與此相同: https : //developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/Object-directional_JS

所以我看不到我在做什么錯。 有人可以幫我解決我在這里做錯的事情嗎?

正確的代碼應為:

print("Hello, world!")

function person(name, age) {
    this.name = name;
    this.age = age;
    this.say = function () {
        print(this.name);
    }
}

var arrayz = [];

arrayz.push(new person("bob",20));
arrayz.push(new person("sally",19));
arrayz.push(new person("joe",22));

for (var z of arrayz) {
       z.say();
}

讓我解釋。 第一個區別是new關鍵字。 這將創建您作為對象創建的函數的新實例。 您所做的方式只是將person稱為函數。 因此它將返回的person值存儲在數組中,而不是對象實例中。 由於person不返回值,因此它將undefined的值存儲到數組中。

有關new操作員的更多信息: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new

其次,您var z in arrayz使用了var z in arrayz 當使用inz成為索引而不是對象。 如果希望z為數組項的值,則應使用var z of arrayz

有關for...in更多信息for...inhttps : //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/for...in

有關for...of更多信息: https : //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/for...of

解決方案:

使用new person(...)代替person(...)將創建所需的對象,並填充您通過在函數體內編寫this.xxx = yyy指定的屬性。

您的錯誤的說明:

您只是在調用該函數,這意味着您試圖獲取其返回值並將其推入數組。

我在您的功能person中看不到任何return語句,因此結果是undefined

您已將3 undefined推入數組,然后嘗試對它們執行say()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM