58
задан 8 October 2008 в 18:56

6 ответов

(извлеченный некоторое объяснение, которое было скрыто в комментариях в другом ответе),

Проблема заключается в следующей строке:

this.dom.addEventListener("click", self.onclick, false);

Здесь, Вы передаете функциональный объект, который будет использоваться в качестве обратного вызова. Когда триггер события, функция вызвана, но теперь это не имеет никакой связи ни с каким объектом (это).

Проблема может быть решена путем обертывания функции (с, он - ссылка на объект) в закрытии следующим образом:

this.dom.addEventListener(
  "click",
  function(event) {self.onclick(event)},
  false);

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

Альтернативный способ решить это состоит в том, чтобы сделать служебную функцию (и избегать использования переменных для привязки этого):

function bind(scope, fn) {
    return function () {
        fn.apply(scope, arguments);
    };
}

Обновленный код был бы затем похож:

this.dom.addEventListener("click", bind(this, this.onclick), false);

Function.prototype.bind часть ECMAScript 5 и обеспечивает ту же функциональность. Таким образом, можно сделать:

this.dom.addEventListener("click", this.onclick.bind(this), false);

Для браузеров, которые еще не поддерживают ES5, MDN обеспечивает следующий контейнер:

if (!Function.prototype.bind) {  
  Function.prototype.bind = function (oThis) {  
    if (typeof this !== "function") {  
      // closest thing possible to the ECMAScript 5 internal IsCallable function  
      throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");  
    }  

    var aArgs = Array.prototype.slice.call(arguments, 1),   
        fToBind = this,   
        fNOP = function () {},  
        fBound = function () {  
          return fToBind.apply(this instanceof fNOP  
                                 ? this  
                                 : oThis || window,  
                               aArgs.concat(Array.prototype.slice.call(arguments)));  
        };  

    fNOP.prototype = this.prototype;  
    fBound.prototype = new fNOP();  

    return fBound;  
  };  
} 
81
ответ дан 1 November 2019 в 04:21

это - одна из самых запутывающих точек JS: 'эта' переменная значит для большей части локального объекта..., но функции являются также объектами, таким образом, 'это' указывает там. Существуют другие тонкие моменты, но я не помню их всех.

Я обычно избегаю использования 'этого', просто определяю локальное 'меня' переменная и использование это вместо этого.

-3
ответ дан 1 November 2019 в 04:21

Я записал этот плагин...

я думаю, что это будет полезно

jquery.callback

1
ответ дан 1 November 2019 в 04:21

Для filezilla необходимо установить FTP-сервер. https://help.ubuntu.com/12.04/serverguide/ftp-server.html Это позволит Вам соединяться со своим экземпляром при помощи порта 21. IP:21. Но предупреждая, один только FTP может быть проблемой безопасности, особенно если этот сервер доступен внешним IP.

Что касается MySQL Workbench http://dev.mysql.com/doc/workbench/en/wb-new-server-instance-wizard.html похоже, что это полагается на соединение SSH. Таким образом, необходимо будет установить ssh сервер на той машине также. https://help.ubuntu.com/11.04/serverguide/openssh-server.html я думаю, что Вы, возможно, должны были бы работать "/etc/init.d/mysql, состояние" как первый участник упомянуло. SSH не мог бы быть достаточно.

я не знаю, является ли mysql уже установкой на том сервере, но смотрите на это также https://help.ubuntu.com/11.04/serverguide/mysql.html

15
ответ дан 1 November 2019 в 14:21

Для jQuery пользователи, ищущие решение этой проблемы, необходимо использовать jQuery.proxy

5
ответ дан 1 November 2019 в 14:21

Хорошее объяснение проблемы (мне описали проблемы, поняв решения до сих пор) доступно здесь .

2
ответ дан 1 November 2019 в 14:21

Другие вопросы по тегам:

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