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

Local variables in function constructors

本文关键字:局部变量 构造函数 函数      更新时间:2023-09-26

在下面的代码中,

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副本?

每个对象的构造函数都有自己的_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