JavaScript的这个对象(javascript this object)

2019-09-16 13:50发布

我一直在为过去4个月Web项目。 要优化我们使用模式的代码的性能。 我的疑问是,它实际上提高性能或不?

当过我们必须使用this对象,我们把它分配给一个局部变量,并使用它。

function someFunction()
{
  var thisObject = this;
  //use thisObject in all following the code. 
}

这里的假设是,分配this对象的局部堆栈变量将提高性能。

我还没有看到这种类型的编码任何地方,所以怀疑它是否是没有用的。

编辑:我知道这个分配对象局部变量是保护对象来完成,但是这不是我们的情况。

Answer 1:

虽然这是在Javascript中一种常见的做法是不是因为性能原因来完成。 在的保存this对象在另一个地方命名通常是为了保存价值this被函数中定义的跨回调。

function someFunction() {
  var thisObject = this;
  var someCallback = function() {
    console.log(thisObject === this);  // Could print true or false
  };
  return someCallback;
}

无论thisObject === this计算结果为真,将取决于它如何被称为

var o = {} 
o.someFunction = someFunction();
var callback = o.someFunction();
callback();        // prints false
callback.call(o);  // prints true


Answer 2:

正如所有的性能问题,应通过实际测量的性能进行检查。 在一个相当简单的测试案例 (实际代码可能会有所不同部分),我发现不同的浏览器不同的结果:

Chrome和Firefox没有什么不同的两个测试之间非常多,但略有不同的是两者之间相反的方向。 IE9显示使用的保存的副本测试this我把它叫做self是显著慢。

如果没有在Chrome和火狐和IE9一个显著和一致的性能差异显示了this快是基本的测试案例,我想你可以得出结论,你问的设计模式约不提供跨浏览器一致的性能提升。

在我的代码,我的副本保存this只有当我需要它内联事件处理程序,回调或方法的内部一致的参照原对象,其中另一个变量this已被设置为别的东西。 换句话说,在需要的时候我才适用这种设计模式。

在这里所以这个设计模式,前面的讨论 ,得出的结论是一些图书馆采用这种设计模式,以便使更多的最小化,因为this不能说是占据了四个大字下面精缩,但其分配到一个局部变量可以被精缩到一个单独的字符变量名。



Answer 3:

即使在这种优化中的(积极)的效果,很可能取决于解释。

另一版本可以恢复的结果。

然而,你到底应该测量,而不是猜测。



文章来源: javascript this object