错误:javascript函数动态添加到类
我是网络开发新手。 今天我学习了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
<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代码>取而代之。