Как передать параметры в функцию, объявленную как left = function () - PullRequest
0 голосов
/ 23 января 2012

Как я могу передать параметры в функцию, объявленную как что-то = function () {};

window.prototype.initInterface = function(){
    this.mainPane = document.createElement('div');
    this.mainPane.style.border="5px solid grey";
    this.mainPane.style.margin="0px";
    this.mainPane.style.width="420px";
    this.mainPane.style.height="600px";

    this.exitButton = document.createElement('input');
    this.exitButton.setAttribute("type", "button");
    this.exitButton.setAttribute("value", "exit");

    this.exitButton.onclick = function(){
        document.body.removeChild(this.mainPane);
    };

    this.mainPane.appendChild(this.exitButton);

    document.body.appendChild(this.mainPane);
}

Когда пользователь нажимает кнопку выхода, я хочу удалить mainPane из тела html-страницы.

    this.exitButton.onclick = function(this.mainPage){
        document.body.removeChild(this.mainPane);
    };

Не работает

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 23 января 2012

Чтобы ваша функция exitButton.onclick имела доступ к переменным, которые вы создали в охватывающей функции initInterface, вы хотите создать замыкание в функции exitButton.onclick, возвращая функцию, которая выполняет желаемое действие, и передавая ейпеременная.

exitButton.onclick = function () {
    return (function() {
         document.body.removeChild(mainPane);
    })(mainPane);
};

Узнайте больше о том, как работают затворы здесь и здесь и посмотрите работающую примерную скрипку .

В качестве альтернативы, вы забываете о замыканиях и переходите вверх по DOM от кнопки, которая вызывает событие к вашему mainPane

exitButton.onclick = function() {
   // in here "this" is the object that triggered the event, exitButton
   document.body.removeChild(this.parentNode);
}

Кроме того, window.prototype не существует, если вы делаете это вбраузер;window - это объект в верхней части цепочки прототипов в сценариях браузера.Вы хотите просто window.initInterface = function () {}, что точно так же, как function initInterface() {}, потому что все, что вы делаете в javascript в браузере, становится свойством window.

0 голосов
/ 23 января 2012

Эта функция является функцией без имени функции. Его можно использовать только один раз, и вам может быть нелегко узнать, какие параметры следует передать.

Вы можете создать другую функцию, такую ​​как:

функция go (a1) {}

И назовите его как window.prototype.initInterface = go (a1);

Или вы можете получить некоторые параметры DOM в этой безымянной функции, используя такие функции, как getDocumentById ("DOM ID") и т. Д.

...