Я пытаюсь понять разницу между 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);
Что дает:
В JSFiddle: http://jsfiddle.net/D6Vdg/1/
Похоже, что отключение функции приводит к удалению ее контекста. В порядке. Но почему тогда (dog.woof) ();
работает?
Это просто немного сбивает с толку, пытаясь понять, что здесь происходит. Очевидно, есть некоторая базовая семантика. м просто не попадаю.