我什么时候应该使用this.x vs var x?

时间:2012-06-22 18:22:11

标签: javascript oop

在制作javascript类函数时,我经常使用this.。但是在使用它时,它让我怀疑使用var是否会产生影响。

var myClass = function() {
    this.x = 4;
    return {
        getVal: this.x
    };
}

与使用var

相同
var myClass = function() {
    var x = 4;
    return {
        getVal: x
    };
}

区别是什么,我什么时候应该使用它们?

4 个答案:

答案 0 :(得分:7)

this变量变为public变量,var变量变为private变量。

使用this关键字声明的变量或函数成为类的实例成员,这意味着它们将在每个新创建的该类实例中可用。当您使用this时,您已经创建了一个类,您需要使用new关键字对其进行实例化,如下所示。

示例:

function Foo() {
  // private var
  var bar = 'I am bar';
  // public var
  this.baz = 'I am baz';
}

var f = new Foo;
console.log(f.bar); // undefined
console.log(f.baz); // I am baz

  

在制作javascript类函数时,我正在使用它。很多。但   在使用它时,它让我想知道它是否会成为一个   改为使用var的差异。

存在显着差异,除非另有需要,否则不应使用this关键字创建不希望出现在类实例中的变量。这只是创造了一个开销,并且正如Crockford所说的那样计算浪费

答案 1 :(得分:1)

您可以this.x访问myClass.x,但var x案例不能这样做。这完全是关于封装。

答案 2 :(得分:1)

如果你不需要继承,闭包(var case)和对象(这种情况)基本上做同样的事情并且是roughly interchangeable

要记住的差异:

  • 当你使用“this”时,需要使用“new”调用构造函数,如果将它们存储在变量上或者将它们作为回调传递,则需要使用.call调用方法。

    < / LI>
  • 如果你实例化大量对象可能会有性能差异(当前引擎可能会更好地使用对象 - 但只有当你将方法放在原型中而不是在构造函数中设置它们时)

  • 使用“var”声明的变量是私有的,无法在函数外部访问。有时候这没关系,但是这可以阻止你做继承(没有“在Javascript中受保护”的概念)

答案 3 :(得分:1)

this:x就像实例变量一样。这些变量具有公共范围。在OOP中作为类变量工作。

虽然var x;的范围有限。这些变量的行为类似于私有变量,可在本地范围内访问。