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を使用すると、コンストラクター関数と連携します。学生をインスタンス化すると、これに割り当てられたすべての値がパブリックにアクセス可能になります。

最初に、学生の名前を大文字のSを使用してStudentに変更することをお勧めします。これはコンストラクターであり、 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

変数のスコープについてです。

最初の例では、id、name、および year を学生の外部からアクセス可能なプロパティとして割り当てています。例えば:

student.id, student.name, student.year

ただし、2 番目の例では、これらの変数は学生関数内でのみスコープを持ちます。外部からそれらの値にアクセスすることはできません。

于 2012-07-31T08:17:00.170 に答える
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

違いは、プロパティが最初はパブリックで、2 番目はプライベートであることです。

アンダースコアの有無にかかわらず、先頭の var に違いはありません。2 番目の例では、引数が一致しません。id_id

于 2012-07-31T08:13:56.897 に答える