很抱歉,如果这不清楚,但我必须对象A
和B
。 A创建B的实例.B有一个调用回调函数的方法bar
。传递给B的函数是A的方法之一foo
,但是foo' s指的是B而不是A.我如何解决这个问题。
function A(){
this.test=(new B(this.foo));
this.test.bar();
}
A.prototype.foo=function(){
console.log(this instanceof A);//needs to return true
}
function B(fn){
this.fn=fn;
}
B.prototype.bar=function(){
this.fn();
}
var a=new A();
答案 0 :(得分:2)
这里有一个非常不寻常的数据结构。无论如何,您可以使用Function.prototype.bind
function A(){
this.test=(new B(this.foo.bind(this)));
this.test.bar();
}
请注意 binding 会创建该函数的新实例,因此===
现在会失败;
function foo() {}
var bar = foo.bind(null),
baz = foo.bind(null);
foo === bar; // false
bar === baz; // false
baz === foo; // false
答案 1 :(得分:1)
您只是将A
的{{1}}函数传递给foo
构造函数,您仍然必须将B
的{{1}}绑定到{{1}之前确保正确调用它。
A