我有一个有两种方法的对象.
foo.publicMethod()
会在foo.privateMethod()
内部打电话.
例如:
foo.prototype.publicMethod = function() { return this.privateMethod() .then(/* Do some other stuff */); };
为了单独测试公共方法,我通过使私有方法返回一个空的promise来存根.出于某种原因,如果我分配
foo.privateMethod = () => Promise.resolve();
一切都很好,但无论如何
foo.privateMethod = Promise.resolve;
生成错误消息: TypeError: object is not a constructor
我看不出这两行代码会产生不同的结果.是的,一个在技术上包装Promise.resolve
一次,但我不知道这应该如何影响最终结果.任何想法有什么不同?
两者并不完全相同.在工作版本中,resolve
调用的上下文是Promise
对象.在第二个版本中,上下文privateMethod
是调用的任何上下文,foo
当您将其称为时foo.privateMethod()
.
要确保使用第二种语法正确设置了上下文,请使用bind
:
foo.privateMethod = Promise.resolve.bind(Promise);
function Foo() {}
Foo.prototype.publicMethod = function() {
return this.privateMethod();
};
var foo = new Foo();
foo.privateMethod = Promise.resolve.bind(Promise);
// Test it
foo.publicMethod().then ( _ => console.log('done'));