猿问

函数中的数组?

昨天在实现根据数据自动生成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]);

    }

}

未展开

展开
https://img3.mukewang.com/5c961930000136be02550134.jpg

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

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


翻阅古今
浏览 400回答 2
2回答

FFIVE

tasks长度不一致应该是打印、赋值顺序的问题console.log(ge);ge.loadTasks(tasks);另外,你上述代码调用ge.loadTasks(tasks);,被赋值的只是ge实例的tasks,构造函数Generator的tasks还是[]。如果想让Generator构造函数所创建的对象拥有tasks值,应该将tasks列表放到构造函数里function Generator() {&nbsp; &nbsp; this.tasks = [&nbsp; &nbsp; &nbsp; &nbsp; {id: 1, name: '张三'}, {id: 2, name: '李四'}, {id: 3, name: '王五'}&nbsp; &nbsp; ];}

米脂

你的代码和调试都有逻辑问题的Generator.prototype.loadTasks = function(tasks) {&nbsp; &nbsp; var self = this;&nbsp; &nbsp; for(var i = 0; len = tasks.length, i < len; i++) {&nbsp; &nbsp; &nbsp; &nbsp; self.tasks.push(tasks[i]);&nbsp; &nbsp; }}后面如果没有在实例中调用loadTasks方法(且实参是全局的tasks变量),则tasks属性是应该为[]啊
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答