我正在寻找一种构建具有一些继承性的函数的方法。
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
答案 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);
....这似乎没有任何问题,感谢大家的帮助!