因此,我们不应该这样做:
Function.prototype.x = function(){
};
Function.prototype.y = function(){
};
所以我想要做的是类似于:
const proto = Object.create(Function.prototype);
proto.x = function(){};
proto.y = function(){};
然而,在程序的某个后续阶段,我希望能够实际定义proto函数体,以便我可以像调用函数一样调用proto:
proto();
有没有方法可以做到这一点?上述方法肯定不可行 :)
这个方法更接近了,错误信息也提示了:
function F(){
}
F.prototype = Function.prototype;
var f = new F();
f.apply(null);
运行上述代码,我们得到以下结果:
类型错误:Function.prototype.apply被调用在[object Object]上, 它是一个对象而不是函数 在Object. (/Users/amills/WebstormProjects/oresoftware/suman/exp7.js:15:3) 在Module._compile (module.js:541:32) 在Object.Module._extensions..js (module.js:550:10) 在Module.load (module.js:458:32) 在tryModuleLoad (module.js:417:12) 在Function.Module._load (module.js:409:3) 在Function.Module.runMain (module.js:575:10) 在startup (node.js:160:18) 在node.js:449:3
class
(支持)。 - Jonathan Lonowski[[Call]]
来识别的。这个属性不是从原型继承而来的,Object.create()
也没有任何机制来定义它。 -class
通过通过super()
调用Function
构造函数来工作,这确实设置了[[Call]]
。 - Jonathan Lonowskivar foo = function() {}; Object.setPrototypeOf(foo, proto);
。 - Jonathan Lonowski