(function () {

     function Student(name, age, gender) {
this._name = name;
this._age = age;
this._gender = gender;
} Object.defineProperty(Student.prototype, "name", {
get: function () {
return this._name;
},
set: function (value) {
this._name = value;
}
});
Object.defineProperty(Student.prototype, "age", {
get: function () {
return this._age;
},
set: function (value) {
this._age = value;
}
});
Object.defineProperty(Student.prototype, "gender", {
get: function () {
return this._gender;
}
}); var stu = new Student("张三", 12, "男");
console.log(stu.name);
stu.age=13;
console.log(stu.age);
})();

在只提一下Object.defineProperty方法。

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

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

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

代码进化:

 (function () {

     function Student(name, age, gender) {
this._name = name;
this._age = age;
this._gender = gender;
} Object.defineProperties(Student.prototype, {
name: {
set: function (value) {
this._name = value;
},
get: function () {
return this._name;
}
},
age: {
set: function (value) {
this._age = value;
},
get: function () {
return this._age;
}
},
gender: {
get: function () {
return this._gender;
}
}
}); function main() {
var stu1 = new Student("Tom", 12, "boy");
console.log(stu1.gender);
} main();
})();

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

代码装甲进化:

 (function () {

     function Student(name, age, gender) {
return {
_name: name,
_age: age,
_gender: gender,
get name() {
return this._name;
},
set name(value) {
this._name=value;
},
get age(){
return this._age;
},
set age(value){
this._age=value;
},
get gender(){
this._gender=gender;
}
}; } var stu1=new Student("Tom",12,"female");
console.log(stu1.name);
})();

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

随机推荐

  1. zabbix_get 命令介绍

    zabbix_get 是 zabbix 服务端的一个命令,用于检测 agent 端的配置是否正确,可以很方便地知道 key 是否能正常获取到数据,在测试自定义监控的时候特别有用 [root@crazy ...

  2. linux c编程:进程控制(一)

    一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程, 也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同 ...

  3. jQuery实现复选框全选/所有取消/反选/获得选择的值

    <!DOCTYPE html> <html> <head> <script type="text/javascript" src=&quo ...

  4. Bootstrap学习5--bootstrap中的模态框(modal,弹出层)

    bootstrap中的模态框(modal),不同于Tooltips,模态框以弹出对话框的形式出现,具有最小和最实用的功能集. 务必将模态框的 HTML 代码放在文档的最高层级内(也就是说,尽量作为 b ...

  5. (转)ubuntu 12.04搭建Adobe Flash Media Server服务

    破解版传送门:http://fms45.cuplayer.com/fms4download.html 福利:1462-5247-1705-7678-8379-5590 下载解压 cd进目录,./ins ...

  6. 3.09课·········for循环

    for循环:反复执行某段代码.for循环四要素:初始条件,循环条件,循环体,状态改变.for(初始条件;循环条件;状态改变){ 循环体} 若初始条件满足循环条件,则进入循环体,执行完循环体,跳回到状态 ...

  7. PAT 天梯赛 L2-009. 抢红包 【排序】

    题目链接 https://www.patest.cn/contests/gplt/L2-009 思路 用结构体存储,然后结构体排序 注意一下 个人编号是从 1 开始 计数的 AC代码 #include ...

  8. Scala window下安装

    第一步:Java 设置 检测方法前文已说明,这里不再描述. 如果还为安装,可以参考我们的Java 开发环境配置. 接下来,我们可以从 Scala 官网地址 http://www.scala-lang. ...

  9. HDU 3954 Level up(多颗线段树+lazy操作)

    又是一开始觉得的水题,结果GG了好久的东西... 题意是给你n个英雄,每个英雄开始为1级经验为0,最多可以升到k级并且经验一直叠加,每一级都有一个经验值上限,达到就升级.接着给你两种操作:W li r ...

  10. linux 新建分区 、格式化 并挂载的命令

    一.新建分区命令为 fdisk /dev/diskname fdisk命令为交互式命令 p:显示当前硬盘上的分区,包括没保存的改动 n:创建新分区 e:表示扩扩展分区 p:表示主分区 d:删除一个分区 ...