【问题标题】:Extending Web API class constructor扩展 Web API 类构造函数
【发布时间】:2019-01-07 22:02:16
【问题描述】:

我想知道是否可以扩展一个内置的 Web API 类 Request,例如在类构造函数实例化时触发立即调用的函数。

这样每当const myRequest = new Request('http://...', {...}); 被声明时,就会触发一个触发器。例如console.log() 或另一个全局函数。无需显式调用Request.prototype.trigger 或类似名称。

感谢任何帮助/建议的学习材料。 谢谢!

【问题讨论】:

  • 这似乎有点设计的味道,反正
  • 你想重写一个所谓的内置类的构造函数吗?
  • 很好覆盖但保留现有功能,只需添加一个立即运行的附加功能。所以在我看来,扩展构造函数,但在技术上,也许。直到“设计气味”:) en.wikipedia.org/wiki/Design_smell

标签: javascript html class oop ecmascript-6


【解决方案1】:

你可以把它扩展到你自己的类中

class MyRequest extends Request{
   constructor(...args){
       super(...args);
       console.log("extended")
   }
}

或覆盖内置的请求(坏主意)

const originalRequest = Request
Request = function(...args){
    console.log("overwrite");
   return new originalRequest(...args)
}

【讨论】:

  • 不错的一个!我想得太多了。非常感谢! :+1:
【解决方案2】:

您可以使用私有函数并覆盖您的 Request 类来执行此操作 - 不建议这样做,因为您应该 自己 实现,您应该自己命名你知道它不是默认对象。

void function(){
  
  const request = window.Request;
  
  class Request extends request {
    
    constructor(){
    
      super( ...arguments );
      
      console.log( 'Calling mock request' );
    
    }
    
  }
  
  window.Request = Request;
  
}();

console.log( new Request( 'http:google.com' ) );

【讨论】:

  • 感谢您的发布,另一个完美的答案,只是太慢了几秒钟,无法被接受。感谢您抽出宝贵的时间。投赞成票! :)
猜你喜欢
  • 1970-01-01
  • 2013-11-15
  • 2021-02-13
  • 2018-08-24
  • 2014-05-29
  • 2013-05-29
  • 2022-11-24
  • 1970-01-01
  • 2012-01-09
相关资源
最近更新 更多