函数构造函数中的局部变量

时间:2015-12-28 05:54:20

标签: javascript constructor javascript-objects

在下面的代码中,

function BaseClass(){
  var _localVar = 1;
  this.prop1 = _localVar;
}

function DerivedClass(){
   BaseClass.call(this);
   this.prop2 = 2;
}

var obj1 = new BaseClass();
var obj2 = new BaseClass();
var obj3 = new DerivedClass();

console.log(obj1.prop1);
console.log(obj2.prop1);
console.log(obj3.prop1);

obj1obj2obj3是否有自己的_localVar副本?

1 个答案:

答案 0 :(得分:1)

每个对象的构造函数都有自己的_localVar副本,因为它只是函数作用域内的局部变量,因此每次执行函数时都会创建一个新的局部变量,但是你的方式是你的代码被构造,它在构造函数中使用一次,复制到一个成员属性,然后再也没有为那个特定的构造函数实例引用。

如果您做了类似的事情,那么您可以看到每个人的不同之处并持续了对象的生命周期:

function BaseClass(val){
  var _localVar = val;
  this.getValue = function() {return _localVar};
  this.setValue = funciton(newVal) {_localVar = newVal;}
}

var x = new BaseClass(1);
var y = new BaseClass(2);
console.log(x.getValue());    // 1    
console.log(y.getValue());    // 2

x.setValue(10);
console.log(x.getValue());    // 10    
console.log(y.getValue());    // 2