首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >javascript此对象

javascript此对象
EN

Stack Overflow用户
提问于 2012-04-16 22:37:40
回答 3查看 1.7K关注 0票数 5

在过去的4个月里,我一直在做网络项目。为了优化代码性能,我们使用了一个模式。我的疑问是,它是否真的提高了性能?

当我们必须使用this对象时,我们将它赋给一个局部变量,并使用它。

代码语言:javascript
运行
复制
function someFunction()
{
  var thisObject = this;
  //use thisObject in all following the code. 
}

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

我在任何地方都没有见过这种类型的编码,所以怀疑它是否没有用处。

编辑:我知道将这个对象赋值给局部变量是为了保留对象,但这不是我们的情况。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-16 22:40:08

虽然这是Javascript中的一种常见做法,但出于性能原因,它是而不是。将this对象保存在另一个命名的local中通常是为了在函数中定义的回调中保留this的值。

代码语言:javascript
运行
复制
function someFunction() {
  var thisObject = this;
  var someCallback = function() {
    console.log(thisObject === this);  // Could print true or false
  };
  return someCallback;
}

thisObject === this的计算结果是否为true将取决于它的调用方式

代码语言:javascript
运行
复制
var o = {} 
o.someFunction = someFunction();
var callback = o.someFunction();
callback();        // prints false
callback.call(o);  // prints true
票数 7
EN

Stack Overflow用户

发布于 2012-04-16 23:10:56

与所有性能问题一样,应该通过实际测量性能来检查它们。在rather simple test case中(您的实际代码可能会有所不同),我发现不同的浏览器都有不同的结果:

Chrome和Firefox在两个测试中没有太大区别,但两者之间的细微差别是在相反的方向上。IE9使用保存的this副本进行测试,我称之为self,它的速度要慢得多。

如果Chrome、火狐和IE9在性能上的显著差异表明this测试用例要快得多,我想你可以得出结论,你所询问的设计模式并没有在不同的浏览器之间提供一致的性能提升。

在我的代码中,只有在内联事件处理程序、回调或this被设置为其他值的方法中,为了一致引用原始对象而需要它时,我才会将this的副本保存到另一个变量。换句话说,我只在需要的时候应用这个设计模式。

previous discussion of this design pattern here on SO中,我们得出的结论是,一些库使用此设计模式是为了允许额外的最小化,因为this不能缩小到它所占用的四个字符以下,但将其分配给局部变量可以缩小为单字符变量名。

票数 2
EN

Stack Overflow用户

发布于 2012-04-16 22:43:20

即使这种优化有(积极的)效果,它也很可能依赖于解释器。

其他版本可能会恢复结果。

然而,最终你应该去测量,而不是猜测。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10176209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档