1

私は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メソッド内で使用しましたが、同じ行から2つのエントリがログに記録されています。

>Object myjavascript.js:28
>DOMWindow myjavascript.js:28

このページには他にもいくつかのライブラリが含まれています

  1. グーグルアナリティクス
  2. jQuery
  3. jQuery用のカラーボックスプラグイン
  4. jQuery Easing

このオブジェクトをWindowにバインドしているアイデアはありますか?


FOUND IT(編集)

ページの他の場所で、jqueryajax呼び出しをオブジェクトと組み合わせて使用​​していました...そしてそれをバインドしていました...関連するコードのすべてを投稿しなかったことをお詫びします...

4

1 に答える 1

2

「アイテムが追加されています」と言いますが、それは無関係です。ログによると、メソッドへの呼び出しが2つあり、そのうちの1つが正しいためです。間違ったものに集中する必要があります。

ブラウザーにデバッガーがあることを確認し (例: Web インスペクターを開いた Chrome)、次のようにコードを変更します。

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

これにより、誤った呼び出しが発生したときにコードが自動的に一時停止します。次に、コール スタックを調べてadd_item、メソッド以外で関数を呼び出しているものを見つけます。

于 2012-04-23T15:49:42.363 に答える