[英]javascript: How to override a method for all the instances of some class?
[英]Javascript: how to override public method in some class?
我有这样的JS类,必须进行测试:
SomeClass = function {
// some stuff that uses initRequest
this.initRequest = function() {
if (window.XMLHttpRequest) {
return new XMLHttpRequest();
} else if (window.ActiveXObject) {
return new ActiveXObject("Microsoft.XMLHTTP");
}
}
}
我想重写方法initRequest进行测试。 我试图做这样的事情
var request = new MockXmlHttpRequest();
var instance = new SomeClass();
instance.initRequest = function() {
return request;
};
// some calls of the SomeClass methods that use initRequest
// some test code with assertions for the request
仍然调用initRequest
方法实际上会调用原始代码,而不是我尝试传递给instance.initRequest
的函数。
任何想法有什么问题吗?
SomeClass.prototype.initRequest = function()
{
return request;
}
查看YUI的扩展功能。 PLUS确实使这一切变得干净,如果您确实愿意,您仍然可以访问超类的方法。 它们的增强对象也可能使您感兴趣。
这是链接http://developer.yahoo.com/yui/examples/yahoo/yahoo_extend.html
在第一个示例中,initRequest在每次调用后返回一个新对象; 在第二个示例中,对initRequest的所有调用都返回对一个(唯一)(模拟)对象的引用。
您提供的代码示例中未更改请求对象。 instance.initRequest简单返回对请求的引用。 为什么期望它有所改变?
由于您的英语,我在理解您的问题时遇到了一些麻烦,但是无论如何我都会尝试回答(如果我回答错了,请告诉我)。
我想您想做的是:
SomeClass = function {
// some stuff that uses initRequest
this.initRequest = function() {
return request;
}
}
换句话说,您想使用新函数覆盖原始的SomeClass对象。 除非您这样做,否则新的SomeClass对象不会使用您的测试方法,否则它们只会使用原始方法。
但是,如果您只想为特定对象而不是整个类覆盖该方法,那么那里的内容应该起作用。 如果是这样,您能否请您澄清究竟是什么在起作用?
首先,此代码示例不是JavaScript中OOP的最佳方法-而是使用prototype
。 再次说明,您的示例在我的浏览器中引发错误( SomeClass
函数的声明无效,也许只是键入错误)。 最后, instance.initRequest
实际上返回了您期望的对象(我已经在Google Chrome上运行了它)-请检查我的示例 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.