数组(id).方法不工作

array[id].method not working?

本文关键字:工作 方法 id 数组      更新时间:2023-09-26

我有一个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();
    }