数组(id).方法不工作
array[id].method not working?
我有一个for循环,它遍历数组中的每个项,并使用一个方法执行数组项。由于某种原因,它返回未定义,尽管没有.方法,它工作得很好。下面是我的代码:
var people = ["susan", "david", "bob", "verity", "rhys", "charles"]
function characters(name, sex) {
this.name = name;
this.sex = sex;
}
var susan = new characters("Susan", "Female");
var david = new characters("David","Male");
var bob = new characters("Bob","Male");
var verity = new characters("Verity","Female");
var rhys = new characters("Rhys","Male");
var charles = new characters("Charles","Male");
characters.prototype.info = function() {
alert("Hi my name is " + this.name + " and I am a " + this.sex);
}
for(i = 0; i < people.length;i++) {
people[i].info();
}
期望的行为是一个警告,说"嗨,我的名字是[name],我是一个[sex]"的每个字符,但实际上什么也没有发生。
你的问题是你的数组是字符串数组,而不是characters
对象数组,这是你的循环所期望的。
people[i]
不是您创建的对象,而是包含每个对象的变量名的字符串。因此,调用info()
方法将不成功,因为您是在字符串上调用它,而不是在characters
对象上调用它。
删除引号并重新排列代码,使数组声明在变量声明之后,这样就可以正常工作了:
function characters(name, sex) {
this.name = name;
this.sex = sex;
}
characters.prototype.info = function() {
alert("Hi my name is " + this.name + " and I am a " + this.sex);
}
var susan = new characters("Susan", "Female");
var david = new characters("David", "Male");
var bob = new characters("Bob", "Male");
var verity = new characters("Verity", "Female");
var rhys = new characters("Rhys", "Male");
var charles = new characters("Charles", "Male");
var people = [susan, david, bob, verity, rhys, charles];
for (i = 0; i < people.length; i++) {
people[i].info();
}
people
是由字符串而非对象组成的数组。
移动这一行:
var people = ["susan", "david", "bob", "verity", "rhys", "charles"]
,所以在之后是,在那里你声明和赋值给变量。
然后去掉引号,这样你就有了变量而不是字符串。
var people = [susan, david, bob, verity, rhys, charles];
实际上,在数组中需要字符,而不是字符串。这就是为什么它不起作用。你正在遍历字符串数组,试图调用它们的info函数,但是字符串没有实现info函数。创建角色后,需要将它们添加到数组中,然后可以循环调用info来获取所需的警报。
function characters(name, sex) {
this.name = name;
this.sex = sex;
}
var susan = new characters("Susan", "Female");
var david = new characters("David","Male");
var bob = new characters("Bob","Male");
var verity = new characters("Verity","Female");
var rhys = new characters("Rhys","Male");
var charles = new characters("Charles","Male");
characters.prototype.info = function() {
alert("Hi my name is " + this.name + " and I am a " + this.sex);
}
var people = [susan, david, bob, verity, rhys, charles];
for(i = 0; i < people.length;i++) {
people[i].info();
}
people
是字符串数组。数组中的字符串"suzan"与后面声明的变量suzan
之间没有关系。相反,尝试将对象本身放入数组中:
function characters(name, sex) {
this.name = name;
this.sex = sex;
}
var susan = new characters("Susan", "Female");
var david = new characters("David","Male");
var bob = new characters("Bob","Male");
var verity = new characters("Verity","Female");
var rhys = new characters("Rhys","Male");
var charles = new characters("Charles","Male");
var people = [susan, david, bob, verity, rhys, charles];
characters.prototype.info = function() {
alert("Hi my name is " + this.name + " and I am a " + this.sex);
}
for(i = 0; i < people.length;i++) {
people[i].info();
}
您甚至可以不使用每个人的所有特定变量,并将角色创建的结果直接放入数组中:
function characters(name, sex) {
this.name = name;
this.sex = sex;
}
var people = [
new characters("Susan", "Female"),
new characters("David","Male"),
new characters("Bob","Male"),
new characters("Verity","Female"),
new characters("Rhys","Male"),
new characters("Charles","Male")
];
characters.prototype.info = function() {
alert("Hi my name is " + this.name + " and I am a " + this.sex);
}
for(i = 0; i < people.length;i++) {
people[i].info();
}
相关文章:
- Javascript form.submit()方法是如何工作的
- JavaScript中的这个call()-方法是如何工作的
- Jquery ajax方法请求体为null,但poster工作正常
- 我该如何阻止单击方法多次工作
- jQuery方法未按预期工作-toggleClass
- 如何让应用程序帮助程序方法在发送的请求为 JS 格式时工作
- jQuery on() 方法只能通过 childSelector 间接工作
- .html() 方法的 jQuery 在 IE 9 中无法正常工作
- 让 jquery 为 ajax 添加的元素工作的最佳方法是什么?
- 如何制作Javascript's减少对数组数组的方法工作
- invoke方法在Lodash中是如何工作的
- Jquery Ajax POST方法不工作,返回未定义的值
- sort和reverse方法在JavaScript中无法正常工作
- jsPDF addHTML方法不工作,没有错误消息
- 这个get方法似乎可以工作,但控制台中存在错误
- 无法调用方法“”;getEditResponseUrl"当使用表单ID打开表单时,绑定到工作表的Google
- Jquery Post方法在本地工作,但在服务器上不工作
- Angular onEnter ui.router方法无法正常工作
- 工作方法:document.getElementById(“ElementName”).style="显示:阻
- 汤博乐:如何用后标记控制CSS(更新:没有JQuery的工作方法!)