我有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]
我在add_items方法中使用了console.log(this)
,我看到从同一行记录了两个条目
>Object myjavascript.js:28
>DOMWindow myjavascript.js:28
页面上还有一些其他库
将此对象绑定到Window的任何想法?
页面上的其他地方,我正在使用jquery ajax调用与我的对象结合......它是绑定它...抱歉没有发布所有相关代码......
答案 0 :(得分: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
函数的内容。