Пожалуйста, помогите мне понять анонимные функции Javascript и jQuery .proxy ()

Я пытался понять, как работают функции и область видимости javascript, и для меня это просто не имеет смысла. Может кто-нибудь объяснить, почему следующий код выводит: «животное говорит мяу» вместо «котенок говорит мяу»?

(function($, exports){
  var animal = function(){};
  exports.Animal = animal;
})(jQuery, window);

(function($, Animal){
  var kitty = new Animal;
  kitty.sayHi = function(){
    console.log(this);
    console.log('says meow');
  }
  $($.proxy(function(){
    $('#js_test').click($.proxy(kitty.sayHi, kitty));
  }, kitty))
})(jQuery, Animal);

UPDATE

@FunkyFresh указал в комментариях, что console.log вызывает toString, когда он передает объект, который по умолчанию возвращает тип объекта (животное). Когда я обновляю приведенный выше код, добавляя

animal.prototype.name = 'Mammal';

в верхнем блоке кода и

kitty.name = 'Zax';

в нижний, консоль выводит «Zax говорит мяу», что кажется правильным.

7
задан kateray 18 August 2011 в 01:31
поделиться