Определите функцию, которая будет реализована пользователем - PullRequest
1 голос
/ 17 ноября 2010

У меня есть следующий пример кода

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;
    }
    

Спасибо.

Ответы [ 3 ]

2 голосов
/ 17 ноября 2010

Вы можете выдать ошибку в реализации по умолчанию:

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

или показать окно предупреждения, в зависимости от вашего приложения.

2 голосов
/ 17 ноября 2010

Я не знаю, так ли это, но если пользователь должен каким-то образом инициализировать ваш объект, вы можете проверить в этой функции, определена ли userDefinedFunction, и, если нет, выдать исключение.

Одна идея, которая считает более чистой реализацией, состоит в том, чтобы позволить пользователю предоставить некоторый объект конфигурации, который определяет функции, например:

yourObject.initialize({
    userDefinedFunction: function() {}
});
1 голос
/ 17 ноября 2010
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() функция проверяет реализации пользовательских функций, поэтому вы можете выполнить первую проверку с использованием этого объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...