鍍金池/ 問答/HTML/ 函數(shù)中的數(shù)組?

函數(shù)中的數(shù)組?

昨天在實(shí)現(xiàn)根據(jù)數(shù)據(jù)自動生成tr的時(shí)候遇到一個(gè)問題。我在html頁面定義了一個(gè)tasks數(shù)組,然后在js處理這個(gè)數(shù)組,但是在遍歷的時(shí)候發(fā)現(xiàn)沒有數(shù)據(jù),是怎么回事?
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這個(gè)函數(shù)的時(shí)候發(fā)現(xiàn)this.tasks的長度是0,但是展開this.tasks的時(shí)候發(fā)現(xiàn)里面又有值,這個(gè)是怎么回事啊?

因?yàn)閠ask這個(gè)數(shù)組希望能在Generator其他定義的方法中使用,大佬們幫我看看吧

回答
編輯回答
安若晴

tasks長度不一致應(yīng)該是打印、賦值順序的問題

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

另外,你上述代碼調(diào)用ge.loadTasks(tasks);,被賦值的只是ge實(shí)例的tasks,構(gòu)造函數(shù)Generator的tasks還是[]。

如果想讓Generator構(gòu)造函數(shù)所創(chuàng)建的對象擁有tasks值,應(yīng)該將tasks列表放到構(gòu)造函數(shù)里

function Generator() {
    this.tasks = [
        {id: 1, name: '張三'}, {id: 2, name: '李四'}, {id: 3, name: '王五'}
    ];
}
2017年1月14日 05:41
編輯回答
掛念你

你的代碼和調(diào)試都有邏輯問題的

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

后面如果沒有在實(shí)例中調(diào)用loadTasks方法(且實(shí)參是全局的tasks變量),則tasks屬性是應(yīng)該為[]

2017年9月24日 05:00