【问题标题】:Returing Method from method in javascript从javascript中的方法返回方法
【发布时间】:2019-10-22 10:56:55
【问题描述】:

我有一个这样写的模块(我们称之为“信息”)

/* infos module */
define([], function() {
    'use strict';

    return function() {
        // some code here

        return {
            text: 'hehe',
            isEditable: function() {
                return false;
            }
        }
    }
});

这个模块在另一个模块中是必需的,并像这样调用 infos().isEditable() 并允许我显示或隐藏一个按钮。

我有可能做一个基本信息模块的 mixin (magento2) 并修改这个模块中的一些方法。

我正在尝试修改 isEditable() 以返回 true,但我只能在 MIXIN 中这样做。

这是我正在尝试做的简化版本: https://jsfiddle.net/mu1oykad/

【问题讨论】:

  • 重新分配returnObject?
  • @CertainPerformance - 很难看出它如何适合“不修改函数”。 :-) 我的意思是,当然,您说的是替换函数,但是...
  • 是的,因为函数代码在声明后是不可变的,所以我唯一能想到的其他事情就是重新分配它
  • “不修改函数” 显然我们必须修改一些东西。有什么限制?就此而言,您指的是什么功能我们无法修改,returnObjectisEditable为什么我们不能修改函数?为什么首先需要这样做?
  • 该函数无法访问,它在另一个模块中定义并由另一个模块调用,我只需要在包装函数中拦截它。

标签: javascript overriding magento2 mixins magento-2.3


【解决方案1】:

你有一个函数isEditable,它被硬连线返回false,但你想调用它并让它返回true而不改变任何连线。不可能。

即使您在调用之前使用!,那么这会给您带来相反的结果,但调用本身仍会返回false,如!false 中的true

简而言之:

!returnObject().isEditable()    // true

【讨论】:

  • 但我认为 OP 想要更改库的一部分,以便对它的其他依赖项,而不仅仅是他的,反映这种变化。
  • 是的,很明显 OP 不想做上述事情。
【解决方案2】:

我不知道需要什么样的这些功能。但要这样做,您可以创建一个新函数,像这样调用isEditable

function notTrueOrNotFalse () {
return !returnObject().isEditable();
}

我不知道你在问什么,但我希望它有所帮助。

【讨论】:

    猜你喜欢
    • 2017-08-14
    • 2011-09-06
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    相关资源
    最近更新 更多