1

我有 javascript 对象

var Bucket = function(id) {
     this.id = id
     this.items = []
}
Bucket.prototype.add_item = function(item) {
     //some uniquness checking code here
     this.items.push(item);
}

出于某种原因,当我实例化对象并尝试添加项目时,出现错误

var bct = new Bucket
bct.add_item(some_item)

'undefined' is not an object (evaluating 'this.items.push')

即使将项目添加到存储桶的数组中,也会发生此错误

console.log(bct.items)
>> [some_item]

console.log(this)在 add_items 方法中使用,我看到两个条目从同一行记录

>Object myjavascript.js:28
>DOMWindow myjavascript.js:28

页面上还包含一些其他库

  1. 谷歌分析
  2. jQuery
  3. jQuery的颜色框插件
  4. jQuery 缓动

有什么想法将此对象绑定到 Window 吗?


找到它(编辑)

在页面的其他地方,我正在结合我的对象使用 jquery ajax 调用......它正在绑定它......抱歉没有发布所有相关代码......

4

1 回答 1

2

您说“正在添加该项目”,但这无关紧要,因为根据您的日志记录,您对该方法有两次调用,其中一次是正确的。你需要专注于不正确的人。

确保您的浏览器中有一个调试器(例如打开了 Web Inspector 的 Chrome),然后像这样修改您的代码:

Bucket.prototype.add_item = function(item) {
     if (this === window) debugger;
     //some uniquness checking code here
     this.items.push(item);
}

当发生错误调用时,这将自动暂停您的代码。然后,查看调用堆栈,找出调用add_item函数的不是方法。

于 2012-04-23T15:49:42.363 回答