【发布时间】:2016-12-30 19:22:58
【问题描述】:
我正在创建一个使用 assign 扩展 RegExp.prototype 的库:
function VerExp() {
return Object.assign(RegExp.prototype, {
// my methods here
});
}
但是当我尝试使用编译功能时,这会导致奇怪的行为:
const regexp = new VerExp();
// some stuffs....
regexp.compile();
错误:
TypeError: Method RegExp.prototype.compile called on incompatible receiver [object Object]
但是,如果我创建一个新实例,扩展它并返回,将会起作用:
function VerExp() {
const regexp = new RegExp();
return Object.assign(regexp, {
// my methods here
});
}
const regexp = new VerExp();
regexp.compile();
我想了解更多错误,为什么会发生,我怎样才能使它工作扩展 RegExp 原型,而不是实例。
谢谢。
【问题讨论】:
-
仅供参考,MDN 建议不要使用
RegExp.compile(),请参阅developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… -
扩展
RegExp原型的目的是什么? -
我正在向原型对象添加新行为。
标签: javascript regex object prototype