3

我想创建一个对象。而且,在我读过的几乎代码中,他们经常使用这种风格:

function student(_id, _name, _year){
   this.id = _id;
   this.name = _name;
   this.year = _year;
}

但是,我不知道下面的代码有什么区别:

function student (_id, _name, _year){
   var id = _id;
   var name = _name;
   var year = _year;
}

例如,我已经测试了alert要筛选的属性,并没有发现任何区别。

谢谢 :)

4

4 回答 4

3

当您使用var声明变量时,它们仅在函数/构造函数的范围内可见。可以这么说,它们是私人的。

在这种情况下,使用this与构造函数密切相关。当您实例化一个学生时,分配给它的所有值都将是公开可访问的。

首先,我建议将您的学生重命名为Student并使用大写字母 S。这是一个约定,表明它是一个构造函数,您需要使用new关键字。

function Student(id, name, year){
   this.id = id;
   this.name = name;
   this.year = year;
}

如果您现在实例化 Student,您可以访问这些值...

var student = new Student(1, "Name", 2012);
console.log(student.year); // => 2012

使用 var 时不能...

function Student (id, name, year){
   var id = id;
   var name = name;
   var year = year;
}

var student = new Student(1, "Name", 2012);
console.log(student.year); // => undefined
于 2012-07-31T08:15:08.743 回答
2

不同之处在于属性在第一个是公共的,而在第二个是私有的。

带或不带下划线的前导 var 没有区别。第二个示例与参数不匹配。id_id

于 2012-07-31T08:13:56.897 回答
2
function student(_id, _name, _year){
   this.id = _id;
   this.name = _name;
   this.year = _year;
}
var s1 = new student(1, 'mike', 20);
console.log(s1.name); // give you mike

function student(_id, _name, _year){
   var id = _id;
   var name = _name;
   var year = _year;
}

var s1 = new student(1, 'mike', 20);
console.log(s1.name); // give you undefined
于 2012-07-31T08:15:04.043 回答
2

它关于变量的范围。

在您的第一个示例中,您将 id、name 和 year 分配为学生的外部可访问属性。例如:

student.id, student.name, student.year

但是,在第二个示例中,这些变量仅在学生函数内具有作用域。您无法从外部访问它们的值。

于 2012-07-31T08:17:00.170 回答