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.prototype
inheritance的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;
….这似乎工作没有任何问题,谢谢大家的帮助!