Javascript对象莫名其妙地绑定到Window和Object

时间:2012-04-23 15:42:37

标签: javascript jquery

我有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

页面上还有一些其他库

  1. Google Analytics
  2. 的jQuery
  3. jQuery的Colorbox插件
  4. jQuery Easing
  5. 将此对象绑定到Window的任何想法?


    找到它(编辑)

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

1 个答案:

答案 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函数的内容。