翻閱古今
2019-03-20 17:13:05
昨天在實現根據數據自動生成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]); }}未展開展開這里打印Generator這個函數的時候發現this.tasks的長度是0,但是展開this.tasks的時候發現里面又有值,這個是怎么回事???因為task這個數組希望能在Generator其他定義的方法中使用,大佬們幫我看看吧
2 回答

FFIVE
TA貢獻1797條經驗 獲得超6個贊
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: '王五'}
];
}

米脂
TA貢獻1836條經驗 獲得超3個贊
你的代碼和調試都有邏輯問題的
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屬性是應該為[]啊
添加回答
舉報
0/150
提交
取消