繁体   English   中英

Javascript:如何在某些类中重写公共方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM