我正在使用原型方法,这里是scenerio
function Foo () {
this.x = 5;
this.y = 2;
this.z = this.addValues();
}
Foo.prototype = {
addValues: function (){
return this.x + this.y;
}
}
显然这只是一个简单的例子;在实际项目中,'addValue'函数中会有很多活动。使用'this'关键字100次或将其缓存到局部变量可以帮助任何性能改进。例如,下面会有什么不同?
Foo.prototype = {
addValues: function (){
var self = this;
return self.x + self.y;
}
}
答案 0 :(得分:5)
self.x
和this.x
之间可能没有任何有意义的区别。 可能会产生影响的是
var x = this.x, y = this.y;
// massive amounts of computation involving x and y
这种微观优化可能不值得,除非你真的参与了一些前沿的游戏开发或其他什么。先将你的算法和数据结构添加到snuff中,然后再担心这样的事情。您永远不知道JavaScript运行时系统的开发人员何时会引入新的优化。它们无法修复您的错误算法,但它们可以极大地影响微优化。
答案 1 :(得分:2)
this
是访问x
和y
的标准方式。如果将this
缓存到本地变量,您将无法获得任何改进 - 如果有的话,您通过首先声明self
来浪费空间。
您看到的唯一可能的风险是这样的:
var f = new foo();
var stupid = f.addValues;
stupid(); // whoops - this is suddenly the global object,
// and your method is broken.
话虽如此,我认为你不应该责备人们滥用你的功能,我不担心。
此外,按照惯例,用作构造函数的函数应以大写字母开头。考虑将foo
重命名为Foo
答案 2 :(得分:0)
在此示例中,将this
分配给self
不应有任何区别。 JavaScript不按值分配对象,而是通过引用分配对象,这意味着self
和this
都指向同一个对象。这样做你什么也得不到。
foo.prototype = {
addValue: function (){
// self and this point to the same object!
var self = this;
return self.x + self.y;
}
}