我什么时候应该使用“this.x”与“var x”
When should I use `this.x` vs. `var x`?
在制作JavaScript类函数时,我正在使用this
。好多。但是在使用它时,这让我想知道使用var
是否会有所作为。
var MyClass = function() {
this.x = 4;
return {
getVal: this.x
};
}
与使用var
相同:
var MyClass = function() {
var x = 4;
return {
getVal: x
};
}
有什么区别,我应该什么时候使用哪个?
同样的问题也适用于class
语法:
class MyClass {
constructor(){
const x = 4;
}
}
对
class MyClass {
constructor(){
this.x = 4;
}
}
具有this
的标识符成为公共属性,而具有var
的标识符成为私有变量。如今,应该使用const
而不是var
;如果无法对特定变量使用 const
,请改用let
。访问语义是相同的。
将标识符与 this
关键字(如 this.x = 4;
)一起使用时,您将设置一个属性,其中包含键"x"
和 this
引用的对象上的值4
。由于this
引用类上下文中的实例,因此此类属性将成为类的实例成员,这意味着它们将在该类的每个新创建的实例中可用。当你使用 this
时,这意味着你打算在类中使用它,所以你需要使用 new
关键字实例化它,如下所示。
例
function Foo() {
// Variables, scoped to the function. Private access.
const bar = 'I am bar';
// Properties, set on the instance. Public access
this.baz = 'I am baz';
this.secretBar = () => `It’s a secret to everybody: ${bar}.`;
}
const f = new Foo();
console.log(f.bar); // undefined
console.log(f.baz); // "I am baz"
console.log("bar" in f); // false; f does not have the property "bar".
console.log(f.secretBar()); // "It’s a secret to everybody: I am baz.";
// `secretBar` is in the scope of `Foo`, so it has access to its variables.
在制作 JavaScript 类函数时,我使用的是
this
.好多。但是在使用它时,这让我想知道改用var
是否会有所作为。
两者之间存在显着差异。除非另有需要,否则不应使用 this
关键字创建不希望出现在类实例中的变量。
myClass.x
访问this.x
,但对于var x
情况,您不能这样做。这都是关于封装的。
如果你不需要做继承,闭包(var 情况)和对象(这种情况)基本上做同样的事情,并且大致可以互换。
要记住的差异:
-
当你使用"this"时,构造函数需要用"new"调用,如果你将它们存储在变量上或将它们作为回调传递,则需要用.call调用方法。
-
如果您实例化大量对象,则可能存在性能差异(当前引擎可能更好地使用对象 - 但前提是您将方法放在原型中而不是在构造函数中设置它们)
-
用"var"声明的变量是私有的,不能在函数外部访问。有时这是可以的,但这会阻止你进行继承(没有"在Javascript中受保护"的概念)
像this.x
这样的表达式指的是属性;它们就像实例变量。这些变量具有公共范围。它们在面向对象编程中用作类变量。
另一方面,var x;
的范围有限。这些变量的行为类似于私有实例变量,并且可以在本地范围内访问。
- javascript中对象构造函数中的var属性与this.properties
- 函数中this和var之间的区别
- Understanding Javascript scope with "var that = this&qu
- “var”变量,“this”变量和“global”变量 - 在JavaScript构造函数中
- “var self = this”方法背后的原理是什么?
- 为什么我们需要“;var self=this“;在Javascript的类中
- JavaScript: var {left, ...props} = this.props;
- JSDoc:我如何记录`var self-this;`
- “var self=this”被认为是一种代码气味
- var 和 this在 Javascript 函数中的区别
- 我什么时候应该使用“this.x”与“var x”
- 为什么我需要将“var value = val;”更改为“this.value = val;”,这样我就不会收到“未定义
- var newusername=$(this).val();仅发送按钮的值
- 如何设置 var self = this;从函数外部
- Javascript:在“this”关键字之前有一个“var”关键字
- 在JavaScript类中声明变量:this与var.Difference
- Backbonejs-在集合中,我们如何从initialize函数访问this.var
- what this var guess = require('myModule1')('myMm
- 何时使用this.var和var=;在javascript函数obj中
- 在过滤器中访问this.var