Javascript 原型内部的事件触发

Javascript 原型内部的事件触发,javascript,Javascript,当我试图调用“Test”函数时,我得到一个错误。 如何解决这个问题?(没有jquery!) 浏览器:firefox 错误: TypeError:此.Test不是函数 无标题文件 MyClass=函数(){ } MyClass.prototype={ Init:function(){ var txt=document.getElementById(“文本”); 如果(txt.addEventListener){ txt.addEventListener(“keyup”,this.Foo,true

当我试图调用“Test”函数时,我得到一个错误。
如何解决这个问题?(没有jquery!)

浏览器:firefox
错误:

TypeError:此.Test不是函数


无标题文件
MyClass=函数(){
}
MyClass.prototype={
Init:function(){
var txt=document.getElementById(“文本”);
如果(txt.addEventListener){
txt.addEventListener(“keyup”,this.Foo,true)
}
},
Foo:function(){
这个。Test();
},
测试:函数(){
警报(“正常”);
}
}
window.onload=函数(){
obj=新的MyClass;
obj.Init();
}


这是因为您将
this.Foo
引用为事件,实际发生的情况是它将该函数复制到对象范围之外,因此
不存在。大多数人所做的是在事件周围使用匿名函数/包装器。

这是因为您将
this.Foo
引用为事件,实际发生的是它将该函数复制到对象范围之外,因此
this
不存在。大多数人所做的是在事件周围使用匿名函数/包装器。

错误是什么?什么浏览器?IE不支持addEventListener(),它使用attachEvent()。这就是为什么大多数人使用JQuery或YUI等框架的原因。当你遇到错误时,请在问题中引用它。我认为你可以使用JQuery来解决这个问题。@Matthew Smith,browser:firefox错误:TypeError:This。测试不是function@Matti正如我所指出的,没有JQUERY纯Javascript错误是什么?什么浏览器?IE不支持addEventListener(),它使用attachEvent()。这就是为什么大多数人使用JQuery或YUI等框架的原因。当你遇到错误时,请在问题中引用它。我认为你可以使用JQuery来解决这个问题。@Matthew Smith,browser:firefox错误:TypeError:This。测试不是function@Matti正如我所指出的,没有JQUERY纯JAVASCRIPT
这个
存在:在触发事件的那一刻,它被设置为element
textarea\text
@shivesh,类似这样的吗<代码>var self=此;addEventListener(“keyup”,function(){self.Foo();},true)
@Marcel在这种情况下并不完全正确,大多数JS库都确保
this
是元素,但在本机javascript中,这种行为并不是100%跨浏览器的。没错,但OP使用的是Firefox和
addEventListener
这个
确实存在:在事件触发的那一刻,它被设置为element
textarea#text
@shivesh类似的东西<代码>var self=此;addEventListener(“keyup”,function(){self.Foo();},true)
@Marcel这在这种情况下并不完全正确,大多数JS库都确保
this
是元素,但在本机javascript中,这种行为不是100%跨浏览器的。没错,但OP使用的是Firefox和
addEventListener
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
        <title>Untitled Document</title>
        <script type="text/javascript">



            MyClass = function(){
            }

            MyClass.prototype = {

                Init: function(){
                    var txt = document.getElementById("text");

                    if (txt.addEventListener) {
                        txt.addEventListener("keyup", this.Foo, true)
                    }


                },

                Foo: function(){
                    this.Test();
                },

                Test: function(){
                    alert('OK');
                }


            }
            window.onload = function(){
                obj = new MyClass;
                obj.Init();
            }
        </script>
    </head>
    <body>
    <textarea id="text" rows="10">
    </textarea>
    </div>
</body>