Object.create(Function.prototype)=>创buildinheritance属性的函数

我正在寻找一种方法来构build一个有一些inheritance的function。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/prototype

我正在寻找的是一个对象,它是一个可以在程序中实例化的函数,但是它具有附加到它的原型的属性。

所以,我们不应该这样做:

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); 

运行以上,我们得到:

TypeError:Function.prototype.apply在[object Object]上被调用,它是一个对象,而不是Object的一个函数。 (module.js:550:10)处的Module._compile(module.js:541:32)处的(/Users/amills/WebstormProjects/oresoftware/suman/exp7.js:15:3) )在Function.Module.runMain的Function.Module._load(module.js:409:3)处的Module.load(module.js:458:32)处的tryModuleLoad(module.js:417:12) :575:10)在node.js:449:3启动时(node.js:160:18)

正确的做法如下:

步骤1

创build一个从Function.prototypeinheritance的Object

 const obj = Object.create(Function.prototype); // inherits many properties, etc 

第2步

稍后在你的程序中声明这个函数

 const f = function(){}; 

步骤3

f__proto__设置为obj

Object.setPrototypeOf(f,obj); 这基本上相当于f.__proto__ = obj;

….这似乎工作没有任何问题,谢谢大家的帮助!