2010-01-13 73 views
2

我的Javascript知识经验较少,所以我可能会在下面使用错误的描述。Javascript替换一个包含动态内容的新函数

我有在静态js文件的对象:

var Info = { 
    methodA: function() { 
     // Call methodB. 
     this.methodB('test'); 
    }, 

    methodB: function(value) { 
     // Do stuff 
    } 
} 

现在,在.aspx文件中,我创建一个函数methodC(值)与不同内容(取决于某些数据),我要插入代替的methodB(值)的上述定义:

... 
var methodC = function(value) { 
    // Do different stuff 
} 
... 

我的想法至今,一直在下面的方式与methodC取代的methodB:

... 
Info.methodB = methodC; 
... 

使用IE的buildin开发工具,调用this.methodB('test')时出现以下错误;从Info.methodA():

Object doesn’t support this property or method

去掉 '这个' 从this.methodB( '测试'),导致错误:

Object expected

我使用Firebug没有得到任何错误 - 可能是因为我使用了各种框架,可能会发现错误。

我应该怎么做,还是应该使用完全不同的方法?

问候,卡斯帕

+0

它为什么不起作用?你会得到什么错误信息?否则你看到的行为是什么? – 2010-01-13 11:14:20

+0

我已添加关于我收到的错误的详细信息。 – Chau 2010-01-13 12:44:13

回答

4

它应该工作,你是这样做的正确方法。问题在别处。

更新: 您拨打一个了methodA对象上这应该仍工作多长时间,如Info.methodA()。

也许你不理解错误信息?

“对象不支持此属性或方法”表示在“this.methodB()”表达式中,没有名为“methodB”的属性。所以这意味着这个不是信息当代码方法A被执行。

“预期对象”表示变量方法B在当前执行上下文中未知。当然这是因为方法B永远不是变量,只有的属性信息

要调试你的问题,你需要知道什么是这个当代码执行时,以及为什么它不是你认为它应该是。当您拨打Info.methodA(),设置为信息方法A开始执行。

+0

改变这一点。methodB('test')直接调用methodC('test')的作品 - 因此我的methodC(值)的实现应该工作。我知道如何调试变量,但如何调试函数/方法,我还没有想出:) – Chau 2010-01-13 12:48:09

+0

如何在IE的开发人员工具中看到'this'? – Chau 2010-01-14 07:21:58

+0

@Alsciende:在Firebug中,我可以看到'this'变量。但在IE的开发者工具中,我需要使用控制台并写下如下内容:var a = this;然后,“this”在其他局部变量中可见。 – Chau 2010-01-22 08:03:18