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的值无法被改变。
  • 可以直接在构造器外面为新建对象添加属性和方法
  • 只可以在构造器里面为构造器添加属性和方法

24 JavaScript对象访问器&JavaScript对象构造器的更多相关文章

  1. JavaScript对象访问器属性

    对象访问器就是setter和getter,他们的作用就是 提供另外一种方法来获取或者设置对象的属性值, 并且在获取和设置的时候,可以用一定的其他操作. 看下面代码: <script> va ...

  2. 网页计时访问器application对象

    网页计时访问器 application对象代表Web应用本身,整个Web共享一个application对象.开始于服务器打开结束与服务器关闭.在不同的浏览器打开j计时器仍然有作用.除非把服务器关闭 & ...

  3. 用TypeScript开发Vue——如何通过vue实例化对象访问实际ViewModel对象

    用TypeScript开发Vue--如何通过vue实例化对象访问实际ViewModel对象 背景 我个人很喜欢TypeScript也很喜欢Vue,但在两者共同使用的时候遇到一个问题. Vue的实例化对 ...

  4. JavaScript的访问器

    一.访问器属性: 1.Configurable:表示能否通过delete删除属性,从而重新定义属性,能否修改属性的特性,或者能否把属性修改为数据属性.对于直接在对象上定义的属性,这个特性的默认值为tr ...

  5. JavaScript之面向对象的概念,对象属性和对象属性的特性简介

    一.大家都知道,面向对象语言有一个标志,那就是他们都有类的概念,通过类我们可以创建任意多个具有相同属性和方法的对象.但ECMAScript(指定JavaScript标准的机构,也就是说JavaScri ...

  6. C#基础(204)--对象初始化器,基本数据类型与引用数据类型特点总结,ref,out关键字的使用

    对象初始化器: 对象在创建过程中也可以使用对象初始化器完成“属性的初始化” Student stu =new Student(){ StudentId=, StudentName="张三&q ...

  7. C#属性访问器

    属性的访问器包含与获取或设置属性有关的可执行语句.访问器声明可以包含 get 访问器或 set 访问器,或者两者均包含.声明采用下列形式之一:get {}set {} get 访问器get 访问器体与 ...

  8. javascript对象属性——数据属性和访问器属性

    ECMA-262第五版在定义时,描述了属性property的各种特征,定义这些特性是为了实现javascript引擎用的,为了表示该特性是内部值,规范把它们放在了两对儿方括号中,例如[[Enumera ...

  9. JavaScript对象的两类属性(数据属性与访问器属性)

    对JavaScript来说,属性并非只是简单的名称和值,JavaScript用一组特征(attribute)来描述属性 (property). 第一类属性数据属性具有四个特征. value:就是属性的 ...

随机推荐

  1. data-dismiss="modal"

    提交按钮不加: 加上则不会出现提示,直接关闭弹出框 <div class="modal fade" id="myModal" tabindex=" ...

  2. Apache Kafka(十二)Log Cleanup 策略

    Log Cleanup 策略 在Kafka中,存在数据过期的机制,称为data expire.如何处理过期数据是根据指定的policy(策略)决定的,而处理过期数据的行为,即为log cleanup. ...

  3. Codeforces Round #620 (Div. 2)E(LCA求树上两点最短距离)

    LCA求树上两点最短距离,如果a,b之间距离小于等于k并且奇偶性与k相同显然YES:或者可以从a先走到x再走到y再走到b,并且a,x之间距离加b,y之间距离+1小于等于k并且奇偶性与k相同也输出YES ...

  4. 励志成为优产的母猪--------猜数游戏 ,历史记录,pickle保存,队列deque

    # pickle 可以处理复杂的序列化语法.(例如自定义的类的方法,游戏的存档等),存档以文件的形式保存 参见 https://www.cnblogs.com/abobo/p/8080447.html ...

  5. mysql渗透过程

    1 打开目标站点:www.xxx.com 2 注册账号并登录,大概找下注入点,没找到 3 用namp -A -T4 目标站点扫描开放的服务 发现mysql等 4 猜弱口令 + 字典  对mysql进行 ...

  6. EntityFramework使用SqlCe数据库

    使用NuGet添加下面3个引用 App.Config的<entityFramework>节点这样配置: <entityFramework> <defaultConnect ...

  7. 牛客腾讯2020校园招聘-后台&综合-第一次笔试

    第一题 Q: 小Q想要给他的朋友发送一个神秘字符串,但是他发现字符串的过于长了,于是小Q发明了一种压缩算法对字符串中重复的部分进行了压缩,对于字符串中连续的m个相同字符串S将会压缩为m|S,例如字符串 ...

  8. webpack-高级-发布策略

    webpack的发布策略 在实际开发中,一般会有两套项目方案: 一套是开发期间的项目,包含了测试文件.测试数据.开发工具.测试工具等相关配置,有利于项目的开发和测试,但是这些文件仅用于开发,发布项目时 ...

  9. UNICODE编码UTF-16 中的Endian(FE FF) 和 Little Endian(FF FE)

    从网上找到的两篇不错的文章,由于被网上多处转载,所以不知道源处,未能注明出处,希望作者见谅,如有意见请发信给我,谢谢! 第一篇很清晰. 介绍Unicode之前,首先要讲解一些基础知识.虽然跟Unico ...

  10. ToolStripComboBox的DataSource和DataTable使用技巧

      可以使用Items属性private void GetData() //一下数据均为测试{toolStripComboBox1.Items.Clear();            DataTabl ...