1、理解对象(对象属性及特性介绍)

章节内容:高程3第6章
1、理解对象属性
2、理解并创建对象
3、理解继承
在java 、c++等语言中,有类的概念,它的对象是通过类来创建的,根据类可以创建具有多个属性和方法的集合,但在ECAMScript中,并没有类的概念,其将对象定义为“无序属性的集合”(键值对),可以将对象想象为散列表,一组名值对,其值可以为基本类型值、应用类型值或函数

一、理解对象
1.1 对象的创建
之前所学创建对象的方式有

var testObject = new Object();
testObject.att1="xx";
testObject.att2="xxx";
testObject att3 = function(){};

或者利用字面值法(较为常用)直接将对象以名值对的形式表示出来

var testObject = {
	att1:"xx",
	att2:"xxx",
	att3:function(){}	
};

1.2 属性类型
使用特性(property)来描述对象的属性(attribute),表述对象属性的各个特征。ECMAScript中有2中定义了2种属性,数据属性和访问器属性
数据属性是一个数据值所占的坑,能够读取和写入

  • [[ Configurable]]:可配置的 能否通过delete删除并重新定义、能否将此属性修改为访问器属性
  • [[Enumerable]]:可枚举,能否通过for-in返回属性
  • [[Writable]]:可写
  • [[Value]]:此属性的数据值,默认为undefined
    通过Object.defineProperty()来修改属性的特性var1:对象 var2:属性名 var3:特性描述符对象
var person1 = {};
Object.defineProperty(person1, 'name', {
  writable: false,
  value: 'wang'
});
person1.name;
//"wang"
person1.name = 'tttt';
person1.name;
//"wang"

访问器属性:不包含数据值,但是包含setter和getter方法来代替值的操作。即读此属性时会调用getter()方法,写时会调用setter()方法

  • [[Configurable]]:
  • [[Enumerable]]:
  • [[Get]]
  • [[Set]]
    同样特性是不能进行直接操作的,只能通过Object.defineProperty()来进行设置
var person={
  name:'wang',
  age:20
  
};

Object.defineProperty(
  person,"nb",{
    set:function(e){this.age+=e;},
    get:function(){return this.age}
  }
);

person.nb=111;
person.age;
person.nb;
//可以将数据属性转化为访问器属性
//在访问器属性中调用此访问器属性会 出现too much recursion(递归)的错误,应该在内部调用时,又会触发get方法  这样就死循环了

定义多个属性
注意一下代码运行的结果与书上有区别
问题已经解决 应该先把书先过一遍的,后面有描述数据属性的初值,configurable是false

var obj = {
};
Object.defineProperties(obj, {
  'name': {
    value: 'wang'
  },
  'age': {
    value: 2019
  },
  'nb': {
    set: function (e) {
      this.age += e;
    },
    get: function () {
      return this.age
    }
  }
});
//不知道是版本原因还是其它原因,这样设置的数据属性值并不如书上所说的是可以delete或者修改的
//在对age 进行delete  或者赋值后   其值并没有发生改变这一点之后在探究**

1.4 读取属性的特性
获取特性描述器:Object.getOwnPropertyDescriptor(对象,属性)
我是无敌大九紫

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值