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



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

页面上还包含一些其他库

  1. 谷歌分析
  2. jQuery
  3. 用于jQuery的Colorbox插件
  4. 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函数之外的内容。

最新更新