函数中的数组?

昨天在实现根据数据自动生成tr的时候遇到一个问题。我在html页面定义了一个tasks数组,然后在js处理这个数组,但是在遍历的时候发现没有数据,是怎么回事?
html页面

var ge = new Generator();
var tasks = [
    {id: 1, name: '张三'}, {id: 2, name: '李四'}, {id: 3, name: '王五'}
];
ge.loadTasks(tasks);
function Generator() {
    this.tasks = [];
}
Generator.prototype.loadTasks = function(tasks) {
    var self = this;
    for(var i = 0; len = tasks.length, i < len; i++) {
        self.tasks.push(tasks[i]);
    }
}

未展开
clipboard.png

展开
clipboard.png

这里打印Generator这个函数的时候发现this.tasks的长度是0,但是展开this.tasks的时候发现里面又有值,这个是怎么回事啊?

因为task这个数组希望能在Generator其他定义的方法中使用,大佬们帮我看看吧

阅读 1.8k
2 个回答

tasks长度不一致应该是打印、赋值顺序的问题

console.log(ge);
ge.loadTasks(tasks);

另外,你上述代码调用ge.loadTasks(tasks);,被赋值的只是ge实例的tasks,构造函数Generator的tasks还是[]。

如果想让Generator构造函数所创建的对象拥有tasks值,应该将tasks列表放到构造函数里

function Generator() {
    this.tasks = [
        {id: 1, name: '张三'}, {id: 2, name: '李四'}, {id: 3, name: '王五'}
    ];
}

你的代码和调试都有逻辑问题的

Generator.prototype.loadTasks = function(tasks) {
    var self = this;
    for(var i = 0; len = tasks.length, i < len; i++) {
        self.tasks.push(tasks[i]);
    }
}

后面如果没有在实例中调用loadTasks方法(且实参是全局的tasks变量),则tasks属性是应该为[]

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题