2

我正在创建一个库,其函数可能每秒被调用数千次。此函数需要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 中工作,那么它当然可以在所有其他浏览器中工作。

4

1 回答 1

1

您可以使用Reflect.construct()

var funcThatGetsUsed = Reflect.contruct(internalFunc /* , [args] */ )
于 2017-05-23T23:33:18.317 回答