在Javascript中使用instanceof自定义对象而不使用new关键字
Using instanceof for custom object without new keyword in Javascript
我有一个工厂函数,它应该返回函数来创建对象的实例。很简单,它是这样的。
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/你需要让你的新函数继承自Factory:
Object.setPrototypeOf(TypeFunction, Factory.prototype);
但是,这将失去从Function.prototype
继承的所有内容,例如call
和bind
。
因此,您还需要确保Factory.prototype
包含它们:
Factory.prototype = Object.create(Function.prototype);
相关文章:
- 如何在不使用 new 关键字的情况下从函数创建对象
- Javascript 对象和 this 关键字
- 如何在不知道关键字的情况下访问javascript对象值
- 在对象中用Javascript编写此关键字
- 查找关键字并创建新对象
- 将“this”关键字发送到对象中
- Undercore将对象转换为数组并按关键字名称排序
- 如何使用'这个“;对象文字中的关键字
- “new”关键字是在构造对象时自动设置“constructor”属性的唯一方法吗
- 为新对象添加函数,将对象添加到数组中.理解困难'这'关键字
- 在json对象中查找关键字中的值
- 从智能对象和图层替换Photoshop中的关键字
- 使用对象作为关键字
- 如何以键值日期为关键字对对象进行排序
- 从对象数组中提取关键字和值
- 使用“new”关键字创建的对象和使用“Object.create”创建的对象给出不同的结果
- JavaScript:古代代码使用“new”关键字启动简单对象.为什么
- 为什么无法使用 const 关键字分配 JavaScript 对象的常量属性
- 如何在 html 中使用“this”关键字在对象上调用方法
- OO Javascript和这个关键字.对象文字