[英]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
。 當使用in
, z
成為索引而不是對象。 如果希望z
為數組項的值,則應使用var z of arrayz
有關for...in
更多信息for...in
: https : //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.