1 回答
TA贡献1875条经验 获得超3个赞
问题是toStringIIFE 的参数不在new Function代码的范围内。相反,它使用全局toString== 。window.toStringObject.prototype.toString
要解决此问题,您需要在 的代码toString中声明变量new Function以使返回的闭包起作用。作为一个简单的常数:
(function() {
var pre_fn = new Function(`
const toString = Object.prototype.toString;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
return function(){
if(this instanceof TestClass) {
return '[object TestClass]';
}
return toString.apply(this, arguments);
}`);
Object.prototype.toString = pre_fn();
})();
或作为参数:
(function() {
var pre_fn = new Function('toString', `
// ^^^^^^^^^^^
return function(){
if(this instanceof TestClass) {
return '[object TestClass]';
}
return toString.apply(this, arguments);
}`);
Object.prototype.toString = pre_fn(Object.prototype.toString);
// ^^^^^^^^^^^^^^^^^^^^^^^^^
})();
添加回答
举报