Рассмотрим следующий класс и вызов foo
метод: (jsFiddle: http://jsfiddle.net/dpvbd9LL/2/)Этот контекст внутри класса
function MyClass() {
this.Prop = "Hello";
}
MyClass.prototype.foo = function() {
var self = this;
$("<p>" + self.Prop + "</p>").appendTo("#result");
}
function sampleMethod(callback) {
// do magic stuff
callback();
}
function executeMethod() {
var myClass = new MyClass();
sampleMethod(function() {
myClass.foo();
});
sampleMethod(myClass.foo);
}
(function() {
executeMethod();
})();
Выход:
Здравствуйте
неопределенными
Как вам может видеть, есть большая разница между вызовами:
sampleMethod(function() {
myClass.foo();
});
sampleMethod(myClass.foo);
Почему это происходит? Как написать класс, чтобы предотвратить такую ситуацию?
Какая ситуация? Единственное различие между двумя вызовами заключается в том, что вы завернули функцию класса в анонимную функцию. По существу это не имеет никакого значения (по крайней мере, если вы ничего не возвращаете) ... – somethinghere
@somethinghere see my edit: Я вставил результат из jsFiddle. –
О, это просто потому, что вы еще не создали метод. Определение метода не выполняет его. Вам нужно попробовать 'var test = new MyClass()', а затем передать sampleMethod 'test.foo'. – somethinghere