考虑关注类并调用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);
为什么会这样?如何编写一个类来防止这种情况?
答案 0 :(得分:0)
这是由sampleMethod(myClass.foo);传递myClass的函数但不在类上下文中,如果你测试当前对象,你会看到它是窗口,全局窗口。
如果在对象上下文中声明sampleMethod,则可以执行类似的操作。
答案 1 :(得分:0)
您可以通过将父作用域传递给匿名函数执行程序来解决此问题,如下所示:
function sampleMethod(callback, scope) {
if(scope) scope[callback]();
else callback();
}
function executeMethod() {
var myClass = new MyClass();
sampleMethod(function() {
myClass.foo();
});
sampleMethod("foo", myClass);
}
问题是您正在尝试传递一个函数 - 对于sampleMethod-未存在的范围。所以,如果你通过了两个,你可以根据需要打电话给他们。