在构造函数内部声明变量有什么用

时间:2019-04-03 17:01:51

标签: javascript

我正在用Java语言研究基于类的结构

至少可以说,我创建了一个简单的类

class something { 
  constructor() {
  var name = "somexyz"
  this.age = 13 
  } 

  somefunc () {
    console.log(this.name)//Undefined
    console.log(name) //blank space
    console.log(this.age) //13
  }
}

然后使用

进行调用
let foo = new something()
foo.somefunc()

哪个consoles.log(在以上代码的注释中提到) 1.未定义 2.空的空间 3. 13

或采用构造函数

function something () {
  this.age =  11
  let age = 13 
  this.getAge = function () {
   return this.age
  }
}

在这里

let somethingNew = new something() 

将返回11岁的年龄

现在,我的问题是,在构造函数中具有变量的目的是什么?

3 个答案:

答案 0 :(得分:2)

重点应该放在“简单类”上-局部变量的概念似乎毫无意义,但实际上非常有用。

简单示例-重复使用变量

class transport
{
    constructor ()
    {
      const someString = "IUseThisAgainAndAgain";
      this.type = 'someType';
      this.name = 'someName';
      this.serial = someString + "SOMETHING";
      this.model = someString + "something thing";
      this.example = someString + "another string concat";
    }
}

如您所见,我们大量使用someString。而且您会看到构造函数方法很大,并且对于重复的实例具有变量将使代码具有更好的可读性,并使您可以轻松地在一个地方修改实例。

答案 1 :(得分:1)

您还可以使用变量设置默认值,也可以用于检查数学计算

例如:

class something { 
    constructor(age) {
      var default_age = "13";
      if(age > 13){
       this.age = age;
      }else{
       this.age = default_age;
      }
    } 

    myage() {
       console.log("I am "+this.age+" years old.")
    }
}
    
 var newobj = new something(15);
 newobj.myage();

 var newobj2 = new something(8);
 newobj2.myage();

答案 2 :(得分:1)

    var中的
  • constructor只在构造函数的范围内定义
  • 在这种情况下,""global scope中存在的字符串。在方法执行的当前范围内找不到name,发现它已上移到window.name。尝试使用其他名称(例如:name2)更改名称,您会收到错误消息。
  • 有关记录"somexyz"的信息,请参见下面的代码段
  • 当然,构造函数中的局部变量对于构造函数本身的逻辑很有用

class something {
  
  constructor() {
    var name = "somexyz"
    var name2 = "somexyz"
    this.age = 13
  }

  somefunc () {
    console.log(this.name)//undefined 
    console.log(name) //window.name
    console.log(window.name) //window.name
    console.log(this.__proto__.constructor.name) //"something"
    console.log(this.age) //13
  }
}
let foo = new something()
foo.somefunc()