gpt4 book ai didi

Javascript 对象莫名其妙地绑定(bind)到窗口和对象

转载 作者:行者123 更新时间:2023-11-30 18:28:14 25 4
gpt4 key购买 nike

我有 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”不是一个对象(正在评估“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 的颜色框插件
  4. jQuery 缓动

知道什么将此对象绑定(bind)到 Window 吗?


找到它(编辑)

在页面的其他地方,我将 jquery ajax 调用与我的对象结合使用...它绑定(bind)了它...很抱歉没有发布所有相关代码...

最佳答案

您说“正在添加该项目”,但这无关紧要,因为根据您的日志记录,您对该方法进行了两次调用,其中一次是正确的。您需要关注不正确的

确保您的浏览器中有调试器(例如打开了 Web Inspector 的 Chrome),然后像这样修改您的代码:

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

这将在发生错误调用时自动暂停您的代码。然后,查看调用堆栈以找出是什么在调用您的 add_item 函数而不是作为方法。

关于Javascript 对象莫名其妙地绑定(bind)到窗口和对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10283770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com