如何保持一个方法的“this”从reffering到调用它的对象

时间:2015-08-11 18:17:32

标签: javascript

很抱歉,如果这不清楚,但我必须对象AB。 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();

2 个答案:

答案 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