【问题标题】:Javascript: Partially overwrite a function without overwriting a few lines of codesJavascript:部分覆盖函数而不覆盖几行代码
【发布时间】:2017-05-09 10:52:44
【问题描述】:

直截了当。 我在 javascript 类 E.G 中有一个函数

export default class gf{
    iLoveThis(){
        this.state.MakeMeWhole = true;
        callBoyfriend();
    }
}

而我所做的实际上是在另一个 JS 文件中覆盖该方法。像这样请注意,我正在将该类扩展到我的其他组件类中

iLoveThis(){
    alert('Got Laid!');
    cheatOnBoyfriend();
}

有什么方法可以让我在另一个类中覆盖该方法而不会丢失 this.state.MakeMeWhole 行? callBoyfriend 通话和其他部分将被覆盖。 假设我已经在许多不同的类中实现了 ILoveThis,因此我不希望在所有其他类中添加额外的代码,而是修改原始方法来实现这一点。

找不到任何可行的示例来完成此操作,因为大多数示例告诉我保存方法,覆盖它然后在覆盖方法后重新运行它,这将导致我修改 100 个类...

更新 需要做的是

class Love {
  constructor(){
  this.state = 'love'
  }

  iLoveThis() {
  this.state = 'derp'
  callBoyfriend();
  }
}

class Love2 extends Love{
  iLoveThis() {
  cheatBoyfriend();//assume method exist
  console.log(this.state) // Somehow make this state as derp, means the codes in the original function are partially overwritten 
  }
}

代码的功劳属于在页面底部发布回复的人。 这可能吗?

【问题讨论】:

  • "我已经在许多不同的类中实现了 ILoveThis" - 那么您将需要在许多不同的类中分别覆盖它,这是没有办法的。当然,您本来可以通过更好的设计来避免这种情况。而且您可以通过编程方式完成,无需接触 100 个文件。
  • “我已经在许多不同的类中实现了 ILoveThis” - 你的意思是其他类引用了原始方法,还是你复制了显示的源代码进入其他课程?
  • @nnnnnn 我将原来的类扩展成我的新子类
  • 如果你扩展类没问题,你只需要覆盖超类中的方法,就像你找到的所有例子告诉你的那样。试试看!并在它不起作用时发布您尝试的代码。
  • 更新问题

标签: javascript jquery html reactjs


【解决方案1】:

我不知道这是否是您想要的,但请尝试使用extends

代码:

class Love {
  constructor(){
    this.state = 'love'
  }
  iLoveThis() {
    this.state = 'derp'
  }
}

class Love2 extends Love{
 iLoveThis() {
    console.log(this.state) // love
  }
}

const l = new Love2().iLoveThis()

Demo

编辑:还有另一个例子。您需要在您的类之间共享一个状态对象。首先,import shareState 对象位于包含每个类的两个文件中。现在,如果您设置状态,它将被更新和共享。

import shareState from './src/shareState.js'

Updated

【讨论】:

  • 子类中可以省略构造函数。
  • Yours 与我想要的很接近,但我不想覆盖 this.state,而是想覆盖该州的不同部分。例如,我在 ILoveThis() 中有一行将某个属性“土豆”设置为真。当我重写它时,我想将另一个属性“鸡”设置为假,但仍希望将属性“土豆”设置为真。认为这是可以实现的?
  • @INeedInsecticideToKillBugs 只需致电super.iLoveThis()?
  • 您需要一个可以在班级之间共享的state 对象。在我的更新代码中查看我的示例。
  • 请允许我稍微改一下这个问题,比如说函数 ILoveThis() 在设置状态后调用另一个函数,我所需要的只是 this.state 行保持而另一个部分功能被覆盖,有可能吗?嗯,也许我也应该更新我的主要问题......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 2012-01-11
  • 2012-06-30
相关资源
最近更新 更多