JavaScript——对象

1.对象是可变的,我们通过引用而非值来操作对象。如果变量x是指向一个对象的引用,那么执行代码var y = x;变量y也是指向同一个对象的引用,而非这个对象的副本。通过变量y修改这个对象亦会对变量x造成影响。

2.创建对象的3种方式:对象直接量、关键字new、Object.create()函数。

3.内置构造函数的原型是只读的:

Object.prototype = o;//赋值失败,但是没报错,Object.prototype没有修改;在严格模式中,任何失败的属性设置操作都会抛出一个类型错误异常。

4.delete只能删除自有属性,不能删除继承属性(要删除继承属性必须从定义这个属性的原型对象上删除他,而且这会影响到所有继承自这个原型的对象)

5.delete不能删除那些可配置属性为false的属性。在严格模式下,汇报一个类型错误;非严格模式下,会返回false.

delete Object.prototype;//不能删除,属性是不可配置的

var x = 1;//声明一个全局变量

delete this.x;//不能删除

function f(){}//声明一个全局函数

delete this.f;//也不能删除全局函数

this.x = 1;//创建一个可配置的全局属性

delete x;//非严格模式返回true,严格模式返回语法错误

delete this.x;//正常工作

6.==:null == undefined;//true

===:null === undefined;//false

7.getter和setter属性(存取器属性):存取器属性不具有可写性。如果属性同时具有getter和setter方法,那么他是一个读写属性。

var o = {

   //普通的数据属性

data_prop:value,

//存取器属性都是成对定义的函数

get accessor_prop() {/*函数体*/}//函数体内可以使用this关键字。

set accessor_prop(value){/*函数体*/}

};

8.属性的特性:Object.getOwnPropertyDescriptor()只能得到自有属性的描述符。对于继承属性和不存在的属性,返回undefined

9.对象的三个属性:原型、类、可扩展性

10.检测一个对象是否是另一个对象的原型(或处于原型链中),请使用isPrototypeOf()方法:

var p = {x:1};//定义一个原型对象
var o = Object.create(p);//使用这个原型创建一个对象

p.isPrototypeOf(o);//true:o继承自p

Object.prototype.isPrototypeOf(o);//true:p继承自Object.prototype

11.要想获取对象的类,可以调用对象的toString()方法,然后提取已返回的字符串的第8个到倒数第二个位置之间的字符。由于很多对象继承的toString()方法都重写了,所以必须间接地调用Function.call()方法。Object.prototype.toString,call(o).slice(8,-1);

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

通过将对象传入Object.esExtensible(),来判断对象是否是可扩展的。如果想将对象转换为不可扩展的,可使用Object.preventExtensions(),此操作不可逆,只影响对象本身,不影响原型的扩展性。

通过将对象传入Object.isSealed(),来判断对象是否封闭。Object.seal()除了将对象设置为不可扩展的,还可以将对象的所有自有属性都设置为不可配置的。也就是说,不能给这个对象添加新属性,而且他已有的属性也不能删除或配置,不过已有的可写属性依然可以设置。不能解封。

Object.freeze()冻结,除了将对象设置为不可扩展的和属性设置为不可配置的之外,还可以将他的所有数据属性设置为只读的(如果对象的存取器属性有setter方法则不受影响)。使用Object.isFrozen()检测是否冻结。

//创建一个封闭对象,包含一个冻结的原型和一个不可枚举的属性

o.x;//==》1

o.x = 222;//==>1

o.y = 123;//==>123

Object.keys(o)//==>[]

推荐阅读更多精彩内容

  • 作者:clearbug原文地址:http://www.cnblogs.com/craftsman-gao/p/48...
    IT程序狮阅读 549评论 1 8
  • 对象 对象是动态的——可以新增属性也可以删除属性,但是对象经常用来模拟静态对象以及静态类型语言中的“结构体”。对象...
    Allen_HD阅读 113评论 0 1
  • 对象是一种复合值:它将很多值(原始值或其他对象)聚合在一起,可通过名字访问这些值。对象也可看做是属性的无序集合,每...
    kissLife阅读 351评论 0 2
  • 序 从最近的js入门系列的阅读量逐步递减,观众老爷的兴趣也不再能够接受一些细节性的地方深度挖掘,让我有了一些思考。...
    zhaolion阅读 1,172评论 5 20
  • 何谓师生关系,即指老师和学生在教育、教学过程中结成的相互关系,相信每个人都拥有不止一段的师生关系。从古到今,师生关...
    舞剑皇阅读 231评论 0 3