Javascript 未捕获类型错误:无法调用方法';XXX和x27;未定义的

Javascript 未捕获类型错误:无法调用方法';XXX和x27;未定义的,javascript,database,oop,Javascript,Database,Oop,我第一次尝试JavaScript OOP时遇到了一个漩涡,我得到了以下错误: 未捕获的TypeError:无法调用未定义的方法“addWeight” 它正在抱怨一个方法在weight.webdb.addWeight下,该方法是从一个全局函数addWeight调用的 var weight = {}; weight.webdb = {}; weight.webdb.db = null; weight.webdb.addWeight = function() { var db = weigh

我第一次尝试JavaScript OOP时遇到了一个漩涡,我得到了以下错误:

未捕获的TypeError:无法调用未定义的方法“addWeight”

它正在抱怨一个方法在
weight.webdb.addWeight
下,该方法是从一个全局函数
addWeight
调用的

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); 
}

演示:

正如错误明确指出的那样,
weight.webdb
不存在。

weight
是局部DOM元素,而不是全局变量。

在函数中定义的局部变量
weight
在外部范围中隐藏
weight
变量。只需调用函数局部变量,如
weight\u elem

function addWeight() {
    var weight_elem = document.getElementById('inputWeight');
    var comment_elem = document.getElementById('inputComment');  
    weight.webdb.addWeight(weight_elem.value, comment_elem.value); 
}
您希望(1)引用您在别处定义的全局变量
weight
,以及(2)引用局部变量
weight
。我希望你明白这是怎么造成问题的


事实上,总是假设局部变量而不是全局变量。解决方案:使用不同的名称。

什么是
webdb
?哦,我得打开小提琴看看你在说什么?在任何情况下,如何将DOM元素与任意命名的对象相关联?是什么让您认为“inputWeight”DOM元素具有“webdb”属性?
var weight = document.getElementById('inputWeight');
var comment = document.getElementById('inputComment');  
weight.webdb.addWeight(weight.value,comment.value);
//^^^^                 ^^^^^^
//  1                     2