A = {
name: 'Class A',
sayMyName: function() {
console.log(this.name);
}
};
B = {
name: 'Class B',
sayMyName: A.sayMyName
};
B.sayMyName(); // Logs 'Class B'
我理解范围没有改变的概念,您正在将实际功能分配给另一个类。
我怎样才能得到执行和参考B
?sayMyName
A
sayMyName
this
A
更新:解释
这样做的原因是我们有多个层:controller
, bll
,repository
并且在某些情况下没有 BLL 逻辑要做,我们最终只是像这样传递参数:
SomeBLL = {
readById: function(id, includes, callback) {
SomeRepo.readById(id, includes, callback);
}
};
如果要更改参数(更可能是创建),那么不编辑 BLL 会更容易,截至目前,它什么都不做。
我想如果它可以只将调用传递给存储库层,那将减少维护。尽管如此,控制器始终必须访问 BLL,因此如果我们确实想在以后添加逻辑,我们可以在不更改控制器的情况下将其添加到正确的位置。
我们最初的解决方案是:
SomeBLL = {
readById: SomeRepo.readById
};
然而,上下文并没有改变,而是在我们在存储库层工作时this
引用。SomeBLL
SomeRepo