我有一个工厂函数,它应该返回创建对象实例的函数。相当简化它看起来像这样。
var Factory = function() {
var factoryPrototype = {};
var TypeFunction = function() {
return Object.create(factoryPrototype);
};
return TypeFunction;
};
然后我可以简单地调用Factory()
来获取我可以用来引用该特定类型的函数。
问题是,我怎么能允许instanceof
运营商呢?
var Mytype = Factory();
console.log(MyType instanceof Factory);
根据我的理解,运营商正在比较MyType.__proto__
与Factory.prototype
。我可以像这样管理第一部分。
Object.setPrototypeOf(TypeFunction, Factory);
它没有错误,功能本身正常工作。第二部分是失败点。我只能做Factory.prototype = Factory
,但这看起来很脏,我宁愿不...还有其他一些更好的"方式是什么?
无论哪种方式,在使用最后一次通话后,我都可以使用Factory.isPrototypeOf(MyType)
,它可以正常工作,现在可能只有干净方式......
您如何看待修改原型功能链?可能会有一些我不明白的副作用吗?
基于@SLaks解决方案,我更加深入并将模式应用于实际实例。http://jsfiddle.net/FredyCr/egbfyood/1/
答案 0 :(得分:0)
你需要让你的新函数继承自Factory:
Object.setPrototypeOf(TypeFunction, Factory.prototype);
但是,这会丢失您从Function.prototype
继承的所有内容,例如call
和bind
。
因此,您还需要确保Factory.prototype
包含它们:
Factory.prototype = Object.create(Function.prototype);