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

错误:javascript函数动态添加到类,javascript,javascript-events,Javascript,Javascript Events,我是网络开发新手。 今天我学习了javascript中的类(函数)。我在如何调用动态添加的方法时出错 我的代码: <head runat="server"> <title></title> <script type="text/javascript" language="javascript"> function MyMethod(name, fn) { var str = "MyFunction1.pr

我是网络开发新手。 今天我学习了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>

函数MyMethod(名称,fn){
var str=“MyFunction1.prototype.”+name+“=fn;”;
eval(str);
}
函数MyFunction1(){
MyMethod(“start”,function(){return“hi”;});
var abc=this.start();//给出错误
}

在这里,当我单击输入按钮时,无法调用动态添加的函数 如何调用我在此处添加的start()函数

请帮帮我。
提前感谢。

MyFunction1
中,此
在这种情况下引用全局对象(对于浏览器,它是
窗口
),因为您将
MyFunction1
作为函数调用,并且不使用
新建MyFunction1()
创建对象

还有一件事需要注意。如果可以在不使用eval的情况下使用
eval

您可以使用以下方法执行相同的操作:

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

使用
eval
可防止您使用优化工具或工具验证代码。至少这些工具中的大多数都没有考虑到
eval
,甚至没有警告您正在使用它。

MyFunction1
中,此
在这种情况下引用全局对象(对于浏览器,它是
窗口
),因为您将
MyFunction1
作为函数调用,并且不使用
newmyfunction1()
创建对象

还有一件事需要注意。如果可以在不使用eval的情况下使用
eval

您可以使用以下方法执行相同的操作:

function MyMethod(name, fn) {
    MyFunction1.prototype[name] = fn;
}
使用
eval
可防止您使用优化工具或工具验证代码。至少这些工具中的大多数都没有考虑到评估,甚至没有警告您正在使用它。

尝试在onclick调用MyFunction1之前添加“new”,创建它的实例。

尝试在onclick调用MyFunction1之前添加“new”,创建它的实例。

我重新解决了它


嗨,问题解决了。谢谢你帮了我这么大的忙:

  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();
    }
在点击按钮时,我调用了函数MyFunction2()

它重新解析了


嗨,问题解决了。谢谢你帮了我这么大的忙:

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

在单击按钮时,我调用了函数MyFunction2()

,而无需更改代码,您可以按如下操作,但我说,如果您阅读有关调用类型和此变量的信息,将会有所帮助

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

在不更改代码的情况下,您可以按照以下步骤操作,但我认为,如果您阅读有关调用类型和此变量的信息,这将非常有用

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

的值不是您期望的值。您是否尝试过
onclick=“new MyFunction1()”
?我建议你读一读关于,关于。另外,使用一个单独的方法动态添加函数,该方法将
eval()
与硬编码的
“MyFunction1.prototype”
一起使用,这似乎是一种过于混乱的编码方式。此
的值并不是您所期望的。您是否尝试过
onclick=“new MyFunction1()”
?我建议你读一读关于,关于。另外,使用单独的方法动态添加函数,该方法使用硬编码的
MyFunction1.prototype“
eval()
似乎是一种过于混乱的编码方式。您好,它解决了。感谢我提供的gret帮助:函数fnOnload(){MyMethod(“start”,函数(){return“Hi”;})函数MyMethod(name,fn){var str=“MyFunction1.prototype.”+name+“=fn;”“eval(str);}函数MyFunction1(){}函数MyFunction2(){var aa=new MyFunction1();var answee=aa.start();}Hi,它解决了。感谢我提供的帮助:函数fnOnload(){MyMethod(“start”,函数(){return“hi”;}}函数MyMethod(name,fn){var str=“MyFunction1.prototype”。+name+”=fn;“eval(str);}函数MyFunction1(){}函数MyFunction2(){var aa=new MyFunction1();var answee=aa.start();}帮自己一个忙,不要使用
var str=“MyFunction1.prototype.”+name+“=fn;”;eval(str)并使用
MyFunction1.prototype[name]=fn相反。帮你自己一个忙,不要使用
var str=“MyFunction1.prototype.”+name+“=fn;”;eval(str)并使用
MyFunction1.prototype[name]=fn取而代之。