Javascript 基本面向对象编程;jQuery-为什么我会得到TypeError?

Javascript 基本面向对象编程;jQuery-为什么我会得到TypeError?,javascript,jquery,oop,prototype,typeerror,Javascript,Jquery,Oop,Prototype,Typeerror,这是我的基本代码: JS: jQuery(函数($) { 函数MyTest(){} MyTest.prototype= { myMethod:function() { $(此)。追加(“”); } } $(文档).ready(函数() { var myTest1=新的MyTest(); $(“#anelement”)。单击(函数() { myTest1.myMethod(); }); }); }); HTML: 点击“anelement”,JS控制台返回: 类型错误:e未定义。。。jque

这是我的基本代码:

JS:

jQuery(函数($)
{
函数MyTest(){}
MyTest.prototype=
{
myMethod:function()
{
$(此)。追加(“”);
}
}
$(文档).ready(函数()
{
var myTest1=新的MyTest();
$(“#anelement”)。单击(函数()
{
myTest1.myMethod();
});
});
});
HTML:


点击“anelement”,JS控制台返回:

类型错误:e未定义。。。jquery.min.js(第5行)

…而且它没有附加“myId”-为什么


谢谢

您需要以某种方式将单击的元素传递到您的方法中。以下是一种方法:

jQuery(function ($) {
    function MyTest() {}

    MyTest.prototype = {
        myMethod: function (el) {
            $(el).append("<div id='myId'></div>");
        }
    }

    $(document).ready(function () {
        var myTest1 = new MyTest();

        $("#anelement").click(function () {
            myTest1.myMethod(this);
        });
    });
});
jQuery(函数($){
函数MyTest(){}
MyTest.prototype={
myMethod:函数(el){
$(el).附加(“”);
}
}
$(文档).ready(函数(){
var myTest1=新的MyTest();
$(“#元素”)。单击(函数(){
myTest1.myMethod(this);
});
});
});
您还可以使用.call在给定的上下文中执行方法,但是您将失去对实例方法和变量的访问

jQuery(function ($) {
    function MyTest() {}

    MyTest.prototype = {
        myMethod: function () {
            $(this).append("<div id='myId'></div>");
        }
    }

    $(document).ready(function () {
        var myTest1 = new MyTest();

        $("#anelement").click(function () {
            myTest1.myMethod.call(this);
        });
    });
});
jQuery(函数($){
函数MyTest(){}
MyTest.prototype={
myMethod:函数(){
$(此)。追加(“”);
}
}
$(文档).ready(函数(){
var myTest1=新的MyTest();
$(“#元素”)。单击(函数(){
myTest1.myMethod.call(this);
});
});
});
或者干脆

jQuery(function ($) {
    function MyTest() {}

    MyTest.prototype = {
        myMethod: function () {
            $(this).append("<div id='myId'></div>");
        }
    }

    $(document).ready(function () {
        var myTest1 = new MyTest();

        $("#anelement").click(myTest1.myMethod);
    });
});
jQuery(函数($){
函数MyTest(){}
MyTest.prototype={
myMethod:函数(){
$(此)。追加(“”);
}
}
$(文档).ready(函数(){
var myTest1=新的MyTest();
$(“#anelement”)。单击(myTest1.myMethod);
});
});

myMethod
中,
$(此)
的上下文是什么?@AndrewPeacock我的目标是将myId附加到元素(单击).
在myMethod内部不是DOM节点或jQuery对象,而是MyTest类的实例。您可以接受一个参数到
myMethod
,然后代替
$(此)
do
$('#'+arg).append(…)并将
“#一个元素”
传递到
myMethod()
。或者,我可能在这一点上弄错了,您可以执行
myMethod($(this))
,然后执行
arg.append(…)
@KevinB谢谢。那么,我应该如何编写一个附加元素的方法(使用jQuery)?它可以工作并且有意义;)谢谢你完整的回答。
jQuery(function ($) {
    function MyTest() {}

    MyTest.prototype = {
        myMethod: function () {
            $(this).append("<div id='myId'></div>");
        }
    }

    $(document).ready(function () {
        var myTest1 = new MyTest();

        $("#anelement").click(function () {
            myTest1.myMethod.call(this);
        });
    });
});
jQuery(function ($) {
    function MyTest() {}

    MyTest.prototype = {
        myMethod: function () {
            $(this).append("<div id='myId'></div>");
        }
    }

    $(document).ready(function () {
        var myTest1 = new MyTest();

        $("#anelement").click(myTest1.myMethod);
    });
});