【问题标题】:Define a function that will be implemented by the user定义将由用户实现的功能
【发布时间】:2010-11-17 09:27:42
【问题描述】:

我有以下示例代码

var object = {
    userDefinedFunction : function(){
        //no implementation, this will be defined by the user
    }
}

我想要实现的是用户给出自己的实现:

object.userDefinedFunction = function(){
    alert("just testing");
}

我对此进行了测试并按预期工作,我想知道的是:

  • 这是解决此类问题的javascript方式吗?
  • 假设userDefinedFunction 是强制实现的,我该如何确保这一点?我可以依靠类似下面的东西,检查implemented,但我正在学习javascript,所以我想知道如何利用这种语言:

    userDefinedFunction : function(){
        implemented = false;
    }
    

谢谢。

【问题讨论】:

  • 我不确定如何在 javascript 中执行此操作,但在 java 中我会创建一个接口或扩展它,然后在那里创建函数
  • @Daniel:是的,我的问题是如何在 javascript 中正确执行此操作;)
  • 我知道,只是提出想法:D

标签: javascript function language-design


【解决方案1】:

我不知道这是否可行,但如果你的对象必须由用户以某种方式初始化,你可以在这个函数中测试,是否定义了userDefinedFunction,如果没有则抛出异常。

感觉是一个更简洁的实现的一个想法是让用户提供某种定义功能的配置对象,例如:

yourObject.initialize({
    userDefinedFunction: function() {}
});

【讨论】:

  • +1 我非常喜欢这个配置对象的想法——绝对是非常可扩展的。不过,这取决于应用程序。
【解决方案2】:

您可能会在默认实现中抛出错误:

var object = {
    userDefinedFunction : function(){
        throw "userDefinedFunction must be implemented";
    }
}

或显示警告框,具体取决于您的应用程序。

【讨论】:

    【解决方案3】:
    var object = {
        userDefinedFunction : undefined,
        anotoherDefinedFunc : undefined,
    
        /* ... */
    
        hasUserImplementedInterfaces : function() {
            if (typeof object.userDefinedFunction !== 'function') return false;
            if (typeof object.anotoherDefinedFunc !== 'function') return false;
            /*  ... */
            return true;
        }
    
    };
    
    console.log(object.hasUserImplementedInterfaces());
    

    hasUserImplementedInterfaces() 函数检查用户函数实现,以便您可以使用该对象作为第一个检查执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 2012-07-20
      • 2021-09-11
      相关资源
      最近更新 更多