I've javascript object
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]
我在 add_items 方法中使用了console.log(this)
,我看到同一行记录了两个条目
>Object myjavascript.js:28
>DOMWindow myjavascript.js:28
页面上还包含一些其他库
- 谷歌分析
- jQuery
- 用于jQuery的Colorbox插件
- jQuery Easing
任何想法是什么将此对象绑定到窗口?
找到它 (编辑)
在页面上的其他地方,我正在使用jquery ajax调用与我的对象结合使用...它正在绑定它...很抱歉没有发布所有相关代码...
你说"正在添加项目",但这无关紧要,因为根据您的日志记录,您有两个对该方法的调用,其中一个是正确的。您需要专注于不正确的。
确保浏览器中有调试器(例如,打开了网页检查器的 Chrome),并按如下所示修改代码:
Bucket.prototype.add_item = function(item) {
if (this === window) debugger;
//some uniquness checking code here
this.items.push(item);
}
这将在发生错误调用时自动暂停代码。然后,查看调用堆栈以找出除了作为方法调用add_item
函数之外的内容。