JavaScript中原型链中添加事件问题

我在事件中调用成员函数,报showCheckedNums is not a function错误。具体代码如下

 <!DOCTYPE html PUBLIC "-//W3C//Dth XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/Dth/xhtml1-transitional.dth">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta charset="UTF-8">
<head>
</head>
<body>
    <input type="checkbox" value="1" id="check0" name="ck" />num1
    <input type="checkbox" value="2" id="check1" name="ck"/>num2
    <input type="checkbox" value="4" id="check2" name="ck"/>num3
    <input type="checkbox" value="8" id="check3" name="ck"/>num4
    <hr />
    选择结果:<label id="ckRes">0</label>
    <hr />  
</body>
</html>
<script>
    function ckCheck (mask,name) {
        this.mask = mask;//用于恢复默认值
        this.name = name;//用checkbox选择器,值为checkbox的name值
        this.temp = mask;//用于操作
        this.nodes = [];
    }
    ckCheck.prototype={
        start:function () {
            this.nodes = document.getElementsByName(this.name);
            this.default();
            this.addEvtLisener();
        },
        showCheckedNums:function(argument){
            document.getElementById("ckRes").innerHTML= this.temp;
        },
        default:function (argument) {
            for(var j = 0;j<this.nodes.length ;j++){
                //初始化checkbox
                this.nodes[j].checked = this.nodes[j].value & this.mask ;//1
            };
            this.showCheckedNums();
        },
        addEvtLisener:function(){
            for(var i = 0; i < this.nodes.length; i++){
                this.nodes[i].addEventListener('click', function (e) {
                    //如果选中:做或运算,否则做按位异或
                    e.target.checked ? this.temp|=e.target.value:this.temp^=e.target.value;
                    //console.log(typeof this.showCheckedNums);
                    this.showCheckedNums();
                })
            }
        },
    }
    var obj = new ckCheck(7,"ck")
    obj.start();
</script>

即在点击checkbox的时候报错。不知道为什么,还请大神能够帮忙解答。

看样子你是个新手,你不了解js中this的作用域,直接上代码解答你的困惑。

addEvtLisener:function(){
var me = this;
for(var i = 0; i < this.nodes.length; i++){
this.nodes[i].addEventListener('click', function (e) {
//如果选中:做或运算,否则做按位异或
e.target.checked ? me.temp|=e.target.value:me.temp^=e.target.value;
//console.log(typeof this.showCheckedNums);
me.showCheckedNums();
})
}
},

            一旦你的this到了click的事件的function里的时候,function中的this已经不是你的ckCheck。而是指你的this.node[i]这个对象,就是你的checkbox。

我知道是作用域的问题,但是当时我在调试的时候发现 this.temp能够取得到值,所以我就困惑了,为什么下面的showCheckedNums不能调用。