2011-12-18 5 views
2

の「XXX」メソッドを呼び出すことはできませんグローバル関数addWeightから呼び出されているweight.webdb.addWeightです。キャッチされない例外TypeError:</p> <blockquote> <p>Uncaught TypeError: Cannot call method 'addWeight' of undefined</p> </blockquote> <p>それは下にある方法についてcomplaningされています。私は最初の試みのためのJavaScript OOPにスワールを与えていると私はこのエラーを取得してい未定義

var weight = {}; 
weight.webdb = {}; 
weight.webdb.db = null; 

weight.webdb.addWeight = function() { 
    var db = weight.webdb.db; 
    db.transaction(function(tx) { 
     var addedOn = new Date(); 
     tx.executeSql('INSERT INTO weight(input,comment,date) VALUES (?,?,?)', [inputWeight, inputComment, addedOn], weight.webdb.onSuccess, weight.webdb.onError); 
    }); 
}; 

function addWeight(){ 
    var weight = document.getElementById('inputWeight'); 
    var comment = document.getElementById('inputComment'); 
    weight.webdb.addWeight(weight.value,comment.value); 
} 

デモ:エラーが明記http://jsfiddle.net/SMbL3/1/

+0

「webdb」とは何ですか?ああ、あなたが話していることを見るためには、フィドルを開く必要がありますか?いずれにしても、DOM要素を任意の名前のオブジェクトにどのように関連づけていますか? –

+0

"inputWeight" DOM要素に "webdb"プロパティがあると思いますか? –

答えて

1

関数内でローカル変数weightが定義されていて、外側スコープの変数weightがシャドウされています。あなたは(1)あなたが他の場所で定義されたグローバル変数weightを参照するように期待している、および(2)地元を参照するために

​​
1

として、weight.webdbが存在しません。
weightは、ローカル変数であり、グローバル変数ではありません。

0
var weight = document.getElementById('inputWeight'); 
var comment = document.getElementById('inputComment'); 
weight.webdb.addWeight(weight.value,comment.value); 
//^^^^     ^^^^^^ 
// 1      2 

:ちょうどweight_elemのような他の関数のローカル変数に何かを呼び出します変数weight。これがどのように問題を引き起こすのかを見ていただければと思います。

実際、グローバル変数ではなくローカル変数が常に使用されます。解決策:異なる名前を使用してください。

関連する問題

 関連する問題