Понимание разницы в Javascript между вызовом функции и возвратом функции, но выполнением ее позже

Я пытаюсь понять разницу между foo.bar () и var fn = foo.bar; fn ();

Я собрал небольшой пример, но я не совсем понимаю, почему отказавшие действительно терпят неудачу.

var Dog = function() {
    this.bark = "Arf";
};

Dog.prototype.woof = function() {
    $('ul').append('
  • '+ this.bark +'
  • '); }; var dog = new Dog(); // works, obviously dog.woof(); // works (dog.woof)(); // FAILS var fnWoof = dog.woof; fnWoof(); // works setTimeout(function() { dog.woof(); }, 0); // FAILS setTimeout(dog.woof, 0);

    Что дает:

    • Arf
    • Arf
    • undefined
    • Arf
    • undefined

    В JSFiddle: http://jsfiddle.net/D6Vdg/1/

    Похоже, что отключение функции приводит к удалению ее контекста. В порядке. Но почему тогда (dog.woof) (); работает?

    Это просто немного сбивает с толку, пытаясь понять, что здесь происходит. Очевидно, есть некоторая базовая семантика. м просто не попадаю.

    5
    задан Alex Wayne 10 January 2011 в 01:47
    поделиться