Javascript初级 JavaScript进阶

访问对象的属性和方法



属性


1)数据属性


数据属性包含一个数据值的位置,在这个位置可以读取和写入值

4个描述行为的特性

[[writable]]

表示能否修改属性的值。默认值为true

[[Enumerable]]

表示能否通过for in循环返回属性。代表属性是否可以枚举。直接在对象上定义的属性默认值为true

[[configurable]]

表示是否能通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。直接在对象上定义的属性,他们的默认值为true

[[value]]

包含这个属性的数据值。读取属性值的时候,从这个位置读取。

写入属性值的时候,把新值保存在这个位置。这个特性的默认值为undefined

 

2)存取器属性


get

获取属性的值

set

设置属性的值



三个相关的对象特性


1)对象的原型(prototype)指向另外一个对象,本对象的属性继承自它的原型对象


通过对象字面量创建的对象使用Object.prototype作为它们的原型

通过new创建的对象使用构造函数的prototype属性作为他们的原型

通过Object.create()创建的对象使用第一个参数(也可以是null)作为它们的原型


2)对象的类(class)是一个标识对象类型的字符串


ECMAScript3和ECMAScript5都未提供这个属性的方法,可以通过对象的toString()方法间接查询


3)对象的扩展标记(extensible flag)指明了(在ECMAScript5中)是否可以向该对象添加新属性


所有内置对象和自定义对象都是显示可扩展的,宿主对象的可扩展性由JavaScript引擎定义的。

可以通过Object.preventExtensions()将对象设置为不可扩展的,而且不能再转换成可扩展的了,可以通过Object.isExtensible()检测对象是否是可扩展的

默认的对象都是可扩展的,下面我们来看一个例子,源代码如下图所示:

 

javascript1.png 


返回的是true,证明可扩展:


javascript2.png 

 

preventExtensions()只影响到对象本身的可扩展性,如果给一个不可扩展的对象的原型添加属性,这个不可扩展的对象同样会继承这些新属性

preventExtensions()将对象变为不可扩展,即锁定,例:


javascript3.png 


不可扩展,返回false,且不能够返回y的值,不能为不可扩展的对象添加属性:


javascript4.png 


可扩展性的目的是将对象锁定,防止外接干扰,通常和对象的属性的可配置行与可写性配合使用

Object.seal()和Object.preventExtensions()类似,除了能够将对象设置为不可扩展的,还可以将对象的所有自身属性都设置为不可配置的。也就是说不能给这个对象添加新属性,而且它已有的属性也不能删除或配置,不过它已有的可写属性依然可以设置。可以通过Object.isSealed()检测对象是否封闭例:


javascript5.png 

javascript6.png 

 

执行结果:


javascript7.png 


检测对象是否被封闭:


javascript8.png 


返回true证明被封闭:


javascript9.png 


Object.freeze()将更严格地锁定对象--冻结(frozen).除了对象设置为不可扩展的和将其属性设置为不可配置的之外,还可以将它自身的所有数据属性设置为只读(如果对象的存储器属性具有setter方法,存取器属性将不受影响,仍可以通过给属性赋值调用它们)。可以使用Object.isFroze()来检测对象是否冻结。

 

实例1:


javascript10.png 

javascript11.png 

javascript12.png 


上图中的if语句如下:


javascript13.png 

javascript14.png 

 

依次执行结果如图:


javascript15.png 


实例2:


javascript16.png 


执行结果:


javascript17.png 


继续添加代码:


javascript18.png 

 

执行结果:


javascript19.png 


代码:


javascript20.png 


执行结果:


javascript21.png 


代码:


javascript22.png 


执行结果:


javascript23.png 


代码:


javascript24.png 


执行结果:


javascript25.png 


代码:


javascript26.png 


执行结果:


javascript27.png 


代码:


javascript28.png 


执行结果:


javascript29.png 

 

代码:


javascript30.png 


执行结果:


javascript1.png 


代码:


javascript2.png 


执行结果:


javascript3.png 


代码:


javascript4.png 


执行结果;


javascript5.png 


代码:


javascript6.png 


执行结果:


javascript7.png 



属性操作


1)访问属性


对象名.属性名

对象名[属性名]

当处于某个对象方法内部的时候,可以通过this来访问同一对象的属性


2)添加属性


对象名.属性名=值

对象名[属性名]=值


3)修改属性


对象名.属性名=值

对象名[属性名]=值


4)删除属性


delete 对象名.属性名

delete 对象名[属性名]


注意:


delete只能删除自身属性,不能删除继承属性

要删除继承属性,只能从定义它属性的原型对象上删除它,而且这会影响到所有继承自这个原型的对象

delete只是断开属性和宿主对象的联系,而不会去操作属性的属性

delete不能删除哪些可配制性为false的属性


5)遍历属性


for in遍历属性



访问方法


对象名.方法名()

注意:

如果对象名.方法名的形式,将返回定义函数的字符串



传递对象和对象比较


1、传递对象


对象传递是通过引用进行传递的

在引用上做的改动会影响原对象


2、对象比较


当对两个对象做比较的时候,只有当两个引用指向同一个对象时为true;否则都为false



【本文由麦子学院独家原创,转载请注明出处并保留原文链接】

logo
© 2012-2016 www.maiziedu.com
蜀ICP备13014270号-4 Version 5.0.0 release20160127

您有一个双11钜惠红包未领取

客服热线 400-862-8862

回到顶部