基本OOP& jQuery - 为什么我会收到TypeError?

时间:2013-06-18 14:23:05

标签: javascript jquery oop prototype typeerror

这是我的基本代码:

JS:

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

HTML:

<div id='anelement'></div>

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

  

TypeError:e未定义... jquery.min.js(第5行)

...而且它不附加“myId” - 为什么?

由于

1 个答案:

答案 0 :(得分:1)

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

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

您也可以使用.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(function ($) {
    function MyTest() {}

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

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

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