Объект-событие доступа в обработчике событий

В первую очередь, Вы законно заинтересованы, потому что круговые зависимости между пакетами плохи. Проблемы, которые выходят из него, растут в важности с размером проекта, но никакой причине заняться этой ситуацией вовремя.

необходимо организовать классы путем размещения классов, которые Вы снова используете вместе в том же пакете. Так, если у Вас есть, например, AbstractNeuron, и AbstractConnection, you’d размещают их в тот же пакет. Если у Вас теперь есть реализации, HumanNeuron и HumanConnection, you’d помещают их в тот же пакет (названный, например, *.network.human). Или, у Вас мог бы быть только один тип соединения, например, BaseConnection и много различных Нейронов. Принцип остается таким же. Вы размещаете BaseConnection вместе с BaseNeuron. HumanNeuron в его собственном пакете вместе с HumanSignal и т.д. VirtualNeuron вместе с VirtualSignal и т.д. Вы говорите: “Obviously Соединением не является Нейрон, таким образом, это не должно быть в пакете.. ”. Это не настолько очевидно, ни корректно, чтобы быть точным.

Вы говорите размещение всех нейронов в тот же пакет. Ни один это корректно, если Вы не снова используете все свои реализации вместе. Снова, смотрите на схему, которую я описал выше. Или Ваш проект является настолько маленьким, Вы помещаете все в единственный пакет, или Вы начинаете организовывать пакеты, как описано. Для получения дополнительной информации смотрите на Общий Принцип Повторного использования :

КЛАССЫ В ПАКЕТЕ СНОВА ИСПОЛЬЗУЮТСЯ ВМЕСТЕ. ПРИ МНОГОКРАТНОМ ИСПОЛЬЗОВАНИИ ОДНОГО ИЗ КЛАССОВ В ПАКЕТЕ ВЫ СНОВА ИСПОЛЬЗУЕТЕ ИХ ВСЕХ.

6
задан John Kugelman supports Monica 13 October 2009 в 03:40
поделиться

3 ответа

Я не совсем понимаю, что вы пытаетесь сделать, но, возможно, что-то вроде этого - то, что вы ищете?

function myfunction(param1, param2){
    return function(event) {
        // For compatibility with IE.
        if (!event) {
            event = window.event;
        }

        alert("event = " + event + ", param1 = " + param1 + ", param2 = " + param2);
    };
}

myhandle.onclick = myfunction(param1, param2);

Конечным результатом этого является то, что анонимная функция внутри myfunction будет вызываться как обработчик onclick , в результате чего будет напечатано событие и два параметра. Два параметра фиксируются во время добавления обработчика событий, в то время как событие будет изменяться каждый раз, когда пользователь нажимает на myhandle .

4
ответ дан 9 December 2019 в 22:36
поделиться

myhandle.onclick = myfunction (param1, param2);

Это обычная ошибка новичков на уровне JavaScript, и библиотеки не могут исправить это за вас.

Вы не назначают myfunction в качестве обработчика кликов, вы вызываете myfunction с param1 и param2 в качестве аргументов и присваиваете возвращаемое значение функции onclick . myfunction ничего не возвращает, поэтому вы должны назначить undefined для onclick , что не окажет никакого эффекта ..

Вы имеете в виду, чтобы назначьте ссылку на саму myfunction :

myhandle.onclick= myfunction;

Чтобы передать функции некоторые дополнительные аргументы, вы должны сделать закрытие, содержащее их значения, что обычно делается с помощью анонимной встроенной функции. Он также может позаботиться о передаче события, если вам нужно (хотя в любом случае вам нужен план резервного копирования для IE, где объект события не передается в качестве аргумента):

myhandle.onclick= function(event) {
    myfunction(param1, param2, event);
};

В ECMAScript Fifth Edition, который будет в будущем версии JavaScript, вы можете написать это еще проще:

myhandle.onclick= myfunction.bind(window, param1, param2);

(где window является фиктивным значением для this , которое вам не понадобится в этом случае.)

Однако, поскольку многие современные браузеры не поддерживают пятую редакцию, если вы хотите использовать этот метод, вы должны предоставить реализацию для старых браузеров. Некоторые библиотеки уже включают один; вот еще один автономный.

if (!('bind' in Function.prototype)) {
    Function.prototype.bind= function(owner) {
        var that= this;
        var args= Array.prototype.slice.call(arguments, 1);
        return function() {
            return that.apply(owner,
                args.length===0? arguments : arguments.length===0? args :
                args.concat(Array.prototype.slice.call(arguments, 0))
            );
        };
    };
}
7
ответ дан 9 December 2019 в 22:36
поделиться

Попробуйте следующее:

if (!event) { event = window.event; }

внутри myfunction ().

0
ответ дан 9 December 2019 в 22:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: