错误:javascript函数动态添加到类

时间:2013-12-27 10:28:18

标签: javascript javascript-events

我是网络开发的新手。 今天我在javascript中学习了类(函数)。我得到一个错误如何调用动态添加的方法。

我的代码:

<head runat="server">
    <title></title>
    <script type="text/javascript" language="javascript">


    function MyMethod(name, fn) {
        var str = "MyFunction1.prototype." + name + "= fn;";
        eval(str);
    }

    function MyFunction1() {

        MyMethod("start", function () { return "hi"; });

        var abc = this.start(); //gives error 


    }

    </script>
</head>
<body>
    <form id="form1" runat="server" >
    <div>
<input type="button" value="Click" onclick="MyFunction1()"/>

</div>
</form>

这里当我点击输入按钮然后无法调用动态添加的功能时 我怎样才能调用我在这里添加的start()函数。

请帮帮我。 在此先感谢。

4 个答案:

答案 0 :(得分:3)

this中的MyFunction1在这种情况下引用全局对象(对于浏览器为window),因为您将MyFunction1称为函数,您不使用new MyFunction1()创建对象。

另一件值得注意的事情。如果可以在没有eval的情况下执行,则不应使用eval

你可以使用以下方法做同样的事情:

function MyMethod(name, fn) {
    MyFunction1.prototype[name] = fn;
}

使用eval会阻止您使用优化工具或工具来验证代码。至少大多数这些工具都不会考虑eval,甚至会对您使用它的情况发出警告。

答案 1 :(得分:1)

尝试在对MyFunction1进行onclick调用之前添加“new”,创建一个实例。

答案 2 :(得分:1)

它解决了我做过

嗨,它解决了。谢谢我的帮助:

  function fnOnload() {
            MyMethod("start", function () { return "hi"; });
        }

    function MyMethod(name, fn) {
        var str = "MyFunction1.prototype." + name + "= fn;";
        eval(str);
    }

    function MyFunction1() {


    }
    function MyFunction2() 
    {
        var aa = new MyFunction1();
        var answee = aa.start();
    }

并点击按钮i调用函数MyFunction2()

答案 3 :(得分:1)

在不更改代码的情况下,您可以按照以下步骤进行操作,但我说如果您阅读有关调用类型和此变量的内容将会有所帮助。

function MyMethod(name, fn) {
  MyFunction1.prototype[name]= fn;
  return MyFunction1.prototype;
}
function MyFunction1() {
  var myPrototype= MyMethod("start", function () { return "hi"; });
  var returnValue = myPrototype.start();
  console.log(returnValue);
}