Object.create(Function.prototype)=> create继承属性的Function

时间:2016-06-04 00:21:27

标签: javascript node.js

我正在寻找一种构建具有一些继承性的函数的方法。

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

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

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

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:在[object Object]上调用了Function.prototype.apply,   这是一个对象而不是一个函数           在对象。 (/Users/amills/WebstormProjects/oresoftware/suman/exp7.js:15:3)           在Module._compile(module.js:541:32)           at 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)           在启动时(node.js:160:18)           在node.js:449:3

1 个答案:

答案 0 :(得分:0)

正确的方法如下!

第1步

  

创建一个继承自Object

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

第2步

  

稍后在您的程序中声明函数

const f = function(){};

第3步

  

__proto__的{​​{1}}设置为f

obj基本上等同于Object.setPrototypeOf(f,obj);

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