get and set

 1 (function () {
 2
 3     function Student(name, age, gender) {
 4         this._name = name;
 5         this._age = age;
 6         this._gender = gender;
 7     }
 8
 9     Object.defineProperty(Student.prototype, "name", {
10         get: function () {
11             return this._name;
12         },
13         set: function (value) {
14             this._name = value;
15         }
16     });
17     Object.defineProperty(Student.prototype, "age", {
18         get: function () {
19             return this._age;
20         },
21         set: function (value) {
22             this._age = value;
23         }
24     });
25     Object.defineProperty(Student.prototype, "gender", {
26         get: function () {
27             return this._gender;
28         }
29     });
30
31
32     var stu = new Student("张三", 12, "男");
33     console.log(stu.name);
34     stu.age=13;
35     console.log(stu.age);
36 })();

在只提一下Object.defineProperty方法。

三个参数:目标对象,方法名,功能(get和set)

注意set只能接受一个数值。

今天偶然想到,set的一个巧用。用它可以代替形参,有时候。具体是不去写形参,而是在用它的时候去拿set去赋值。

代码进化:

 1 (function () {
 2
 3     function Student(name, age, gender) {
 4         this._name = name;
 5         this._age = age;
 6         this._gender = gender;
 7     }
 8
 9     Object.defineProperties(Student.prototype, {
10         name: {
11             set: function (value) {
12                 this._name = value;
13             },
14             get: function () {
15                 return this._name;
16             }
17         },
18         age: {
19             set: function (value) {
20                 this._age = value;
21             },
22             get: function () {
23                 return this._age;
24             }
25         },
26         gender: {
27             get: function () {
28                 return this._gender;
29             }
30         }
31     });
32
33     function main() {
34         var stu1 = new Student("Tom", 12, "boy");
35         console.log(stu1.gender);
36     }
37
38     main();
39 })();

这里用Object.defineProperties批量设置属性。注意格式就行。

代码装甲进化:

 1 (function () {
 2
 3     function Student(name, age, gender) {
 4         return {
 5             _name: name,
 6             _age: age,
 7             _gender: gender,
 8             get name() {
 9                 return this._name;
10             },
11             set name(value) {
12                 this._name=value;
13             },
14             get age(){
15                 return this._age;
16             },
17             set age(value){
18                 this._age=value;
19             },
20             get gender(){
21                 this._gender=gender;
22             }
23         };
24
25     }
26
27     var stu1=new Student("Tom",12,"female");
28     console.log(stu1.name);
29 })();

这样可以把get和set写在内部。同样注意格式。

时间: 2024-12-25 11:53:50