ES5引入了Getter和Setter

Getter和Setter允许定义对象访问器

JavaScript Getter(get关键字):获取对象属性

 <script>
var person = {
name: "lisi",
age: 12,
language: "chi",
get lang() {
return this.language;
}
};
document.getElementById("demo").innerHTML = person.lang;
</script>

JavaScript对象函数方式:

<script>
var car1 = {
name: "bmw",
size: "middle",
price: 10000000,
getName: function(){
return this.name;
},
setName: function(newName){
this.name = newName;
}
}; document.getElementById("demo").innerHTML =
car1.getName();
car1.setName("audi");
document.getElementById("demo").innerHTML =
car1.getName();
</script>

JavaScript Setter(set关键字):设置对象属性

<script>
var car = {
name: "bmw",
size: "middle",
price: 10000000,
set newName(newname){
this.name = newname;
}
};
car.newName = "benz";
document.getElementById("demo").innerHTML = car.name;
</script>

JavaScript对象中,get和set关键字设置的函数调用是以访问属性的形式访问,obj.func = str;  

JavaScript对象中,一般函数的访问形式是obj.func(str);

相较之下,get和set方式提供了更简洁的语法。

JavaScript Getter和Setter实现计数器:

<script>
var counter = {
count: 0,
get reset() {
this.count = 0;
},
get increment() {
this.count++;
},
get decrement() {
this.count--;
},
set add(number) {
this.count += number;
},
set subtract(number) {
this.count -= number;
}
};
counter.increment;
counter.add = 100;
counter.decrement;
counter.subtract = 50;
document.getElementById("demo").innerHTML = counter.count;
</script>

Object.defineProperty:为对象添加新属性或者修改已经存在的属性

Object.property(obj,prop,desc)

  • obj:需要定义属性的当前对象
  • prop:当前需要定义的属性名字(字符串类型)
  • desc:对定义属性的描述

Object.defineProperty()实现计数器:

<script>
var counter1 = {
count: 0
};
Object.defineProperty(counter1, "reset", {
get: function () {
this.count = 0;
}
});
Object.defineProperty(counter1, "increment", {
get: function () {
this.count++;
}
});
Object.defineProperty(counter1, "decrement", {
get: function () {
this.count--;
}
});
Object.defineProperty(counter1, "add", {
set: function (number) {
this.count += number;
}
});
Object.defineProperty(counter1, "subtract", {
set: function (number) {
this.count -= number;
}
}); counter1.increment;
counter1.add = 50;
counter1.subtract = 20;
document.getElementById("demo").innerHTML = counter1.count;
</script>

JavaScript对象构造器:

对象构造器不同于单一对象,对象构造器旨在创建对象类型,或者说对象的蓝图。

以下示例中,Person()就是对象构造器函数。

单一对象:

var Person = {
firstName = "",
lastName = "",
age = "",
eyeColor = ""
}

对象构造器:

<script>
//对象构造器
function Person(f,l,age,eyeColor){
this.firstName = f;
this.lastName = l;
this.age = age;
this.eyeColor = eyeColor;
//为构造器添加属性和方法,必须在构造器函数里面添加,不能在外面添加(除非使用原型链prototype)
this.changeName = function(name){
this.lastName = name;
};
}
var zhangsan = new Person("zhangsan","lisi",13,"blue");
var liuliu = new Person("liuliu","qiqi",13,"blue");
document.getElementById("demo").innerHTML = zhangsan.lastName + " " + zhangsan.age; //为第一个对象添加国籍
zhangsan.nationnality = "China";
document.getElementById("demo").innerHTML = zhangsan.nationnality; //为第一个新对象添加方法
zhangsan.fulName = function(){
return zhangsan.firstName + " " + zhangsan.lastName;
};
zhangsan.changeName("alibaba");
document.getElementById("demo").innerHTML = zhangsan.fulName();
</script>
  • this指代当前对象,在对象构造器中,this是没有值的,当你创建了一个新对象,他就指代这个新对象。
  • this是关键词,不是变量,this的值无法被改变。
  • 可以直接在构造器外面为新建对象添加属性和方法
  • 只可以在构造器里面为构造器添加属性和方法

最新文章

  1. ASP.NET corrupt assembly “Could not load file or assembly App_Web_*
  2. Jenkins 在windows下的安装与配置
  3. CVPR 2007 Learning to detect a salient object
  4. winform基础,主要控件简单介绍,以及小练习
  5. Java Hour 48 Servlet 简介
  6. 一个简单的AJAX实例
  7. 高效开发Android App的10个建议(转)
  8. mysql数据库中查询时间
  9. python测试框架--nose
  10. [译]MVC应用程序生命周期
  11. iOS之NSDictionary和NSArray以及NSMutableDictionary和NSMutableArray:将不再是问题
  12. 版本控制工具——Git常用操作(上)
  13. .net MVC +EF+VUE做回合制游戏(二)
  14. 你们都在用IntelliJ IDEA吗?或许你们需要看一下这篇博文
  15. ubuntu16.04 install qtcreator
  16. 地图标绘系统V1.0测试版【申明:来源于网络】
  17. 机器学习技法笔记:02 Dual Support Vector Machine
  18. android获取屏幕宽度和高度
  19. 解决最近vs2017总是在加载工程的时候卡住不不动
  20. 实验1 单片机IO口应用及数码管显示

热门文章

  1. leetcode 64. 最小路径和 动态规划系列
  2. 初学Java时使用记事本开发出现的中文乱码问题
  3. Django_后台管理
  4. AC3 Rematrix
  5. 【Python】 基础语法
  6. (c#)最小绝对差
  7. zlt项目实践
  8. 剑指offer 面试题38 字符串的排列
  9. MongoDB-2 安装与配置
  10. Codeforces Round #599 (Div. 2) B2. Character Swap (Hard Version)