我想创建一个对象。而且,在我读过的几乎所有代码中,他们经常使用这种风格:
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
属性来进行筛选,并且看不出任何差异。
谢谢:)
答案 0 :(得分:3)
使用 var 声明变量时,它们仅在函数/构造函数的范围内可见。他们是私人所以说。
在这种情况下,使用 this 与构造函数一起使用。当您实例化学生时,分配给该学生的所有值都将公开访问。
首先,我建议您将学生重命名为学生,并使用大写 S 。这是一个约定,表明它是构造函数,您需要使用 new 关键字。
function Student(id, name, year){
this.id = id;
this.name = name;
this.year = year;
}
如果您现在实例化学生,则可以访问值...
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
答案 1 :(得分:2)
区别在于第一个属性是公共的,而第二个属性是私有的。
带有或不带下划线的前导var没有区别。第二个例子使参数不匹配。 id
vs _id
。
答案 2 :(得分: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
答案 3 :(得分:2)
关于变量的范围。
在您的第一个示例中,您将id,name和year指定为学生的外部可访问属性。例如:
student.id, student.name, student.year
但是,在第二个示例中,这些变量只有内部学生函数。您无法从外部访问其值。