2012-04-23 61 views
1

我已经JavaScript对象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. 谷歌Analytics(分析)上的一些其他的库所记录的两个条目
  2. jQuery
  3. jQuery的Colorbox插件
  4. jQuery Easing

任何想法是什么将该对象绑定到Window?


发现它(编辑)

其他页面上的某个地方,我用我的对象组合jQuery的AJAX调用...它是有约束力它...抱歉没有张贴所有的相关代码...

+0

@limelights:**否**否否否否否.... – 2012-04-23 15:49:38

+2

你必须做一些你没有向我们展示的东西。 – ChaosPandion 2012-04-23 15:50:02

+0

@ hidden:你引用的代码工作正常:http://jsbin.com/ipasom它非常依赖[自动分号插入的恐怖](http://es5.github.com/#x7.9) ,但它的工作原理。 – 2012-04-23 15:51:31

回答

2

你说“该项目正在增加”,但这是无关的,因为根据你的日志你有两个调用方法,其中一个是正确的。您需要关注不正确的之一。

确保您在浏览器中有一个调试器(例如Chrome浏览器与Web检查打开),并修改代码如下所示:

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

这将自动暂停你的代码发生错误呼叫时。然后,查看调用堆栈,以找出除了作为方法之外调用您的add_item函数的内容。