我正在编写一个工厂函数,它返回一个Repository
实例,该实例具有从另一个对象绑定到它的方法。这是一个例子:
class Repository {
constructor() {
}
performQuery() {
console.log('Performing query');
}
}
const repositoryFactory = (methodObj) => {
let repo = new Repository();
for (let prop of Object.getOwnPropertyNames(methodObj)) {
repo[prop] = methodObj[prop].bind(repo);
}
return repo;
}
let newRepo = repositoryFactory({
doSomething: function() {
console.log(this);
},
doSomethingElse: function() {
console.log(this);
}
});
newRepo.doSomething();
newRepo.performQuery();
newRepo.doSomething应该记录Repository实例。它的工作原理很明显,因为方法performQuery
将被附加。在这个例子中,它不是。
如果那里有一些语法错误我很抱歉;我稍微修改了原始代码以使其更加简化,但这正是我试图实现方法绑定的方式。每当我尝试从this
或doSomething
内部访问doSomethingElse
时,我都会undefined
。