我正在创建一个库,其中的函数每秒可能被调用数千次。该功能需要new
构造函数,以便将一组新数据绑定到固定原型,如下所示:
var internalFunc = function(a) {
this.foo = a;
};
internalFunc.prototype = {
something: 'some value',
anotherIndex: 'another value',
/* ... */
};
所以,我目前的方式internalFunc
被称为new
构造函数是通过使用第二个函数,类似于所谓的“构造函数代理”。
var funcThatGetsUsed = function( someArgument ){
return new internalFunc( someArgument );
};
不过,回到主要问题,这funcThatGetsUsed
每秒可以被调用数千次。因此,它可能会减少库的大小,并且如果我能够消除中间人“构造函数代理”函数,并且只需将新的构造函数绑定到internalFunc
,也许以类似的方式bind
函数如下:
var funcThatGetsUsed = internalFunc.bindToConstructor('new');
那么,有没有办法‘bindToConstructor
' 在 javascript 中减少函数调用开销?
请注意,我之所以不能直接告诉库的用户使用 new 运算符,是因为这会违背这个特定库的目的。案例和要点:JQuery 使用“构造函数代理”功能。只需输入类似的内容console.log($.toString())
,您应该看到类似这样的内容:
> console.log("'" + $.tostring() + "'")
'function (a,b){return new n.fn.init(a,b)}'
请注意,我的目标是 Edge 及以上版本,因此该解决方案不必在 Internet Explorer 中工作。我所说的“针对 Edge”的意思是,如果它可以在 Edge 中运行,那么它当然也可以在其他所有浏览器中运行。