JS对象

  这里只是介绍一些对象的基本定义声明方式遍历等基本操做,关于对象的闭包、封装和继承在面向对象一文中介绍html

定义

  任意值的集合,用冒号分割组成名值对(键值对),不一样的键值对之间逗号隔开浏览器

  键值对即对象的属性,键为属性名,值为属性值闭包

  对象中的函数叫方法(也是属性)函数

 

声明方式

字面量

  直接经过var声明一个对象,并在{}中写出该对象的属性名、属性值、函数(方法)this

  

  构造示例以下prototype

  

构造函数

  用var声明构造一个Object对象的实例,而后经过点(.)的方法,给该对象添加属性和方法3d

  

  构造示例以下:code

  

构造方法

  定义一个函数和其形参,在函数内部用this指向当前函数,把传入的参数添加为属性值,定义完成后,构建一个函数的实例htm

  注意建立的若干个对象实例彼此之间没有关联对象

  我的理解,有点相似于工厂模式,也是像把一个对象丢入一个白盒中,输出了一个有指定属性名和方法的对象

  不过这里声明对象是在函数的外部,函数只负责给this传递属性值添加方法,能够理解成发了一张说明书,可是要本身加工生产一个对象

  

  构造示例以下:

  

工厂模式

  定义一个函数,函数内部var声明构造一个Object对象,并经过对象名.属性名=属性值来给这个对象添加属性和方法,最后返回该对象

  返回的对象具备相同属性名方法,但彼此独立没有关联

  工厂模式跟构造方法不一样在,传入的参数是赋值给函数内部建立的obj的,最后返回obj,能够理解成,在工厂内部完成了建立和添加的过程,出厂就可直接使用

  

  构造示例以下:

  

原型模式

  定义一个空函数(空方法),经过函数的prototype属性来给该空函数添加属性、方法,最后经过var声明建立一个该函数的实例,以生成一个对象

  

  在添加属性和方法的时候,能够直接用prototype一个个添加,也能够向prototype传递一个对象,对象内保持JSON格式

  

  构造示例以下:

  

  

混合模式

  用构造方法建立一个函数,在其中用this指向当前函数,把传入的参数赋值为属性值,再用原型模式给函数添加方法

  最后构建一个函数的实例,以建立一个对象

  

  实例以下:

  

7.ECMAScript5的Object.create()方法

  老版本浏览器不兼容

 

操做

访问/修改值

  用.方法(即访问对象中的属性)

1 console.log(friend.name);

  或者用[],向其中传入一个属性名的字符串

1 console.log(friend['name']);

删除

  用delete,后接要删除的属性名(此时访问该属性名,输出结果为undefined,不会报错

1 delete friend.name;
2 console.log(friend.name);

检测是否有某个属性

  属性名 in 对象名(属性名要用引号括起来

1 console.log('name' in friend);

遍历

  语法格式如for (p in 对象名)

  其中p表示属性名,访问其中的属性值要用对象名[p](由于此时p表示一个字符串)

  若是在遍历时使用对象名.p/对象名['p'],没法访问属性值返回undefined

  

   另外须要注意的是,构造函数声明的对象须要实例化以后才能够遍历

  能够理解成,你没法对着一个说明书,挨个儿说其中零部件的状态,由于这里你还没给对象赋上属性值

  

对象的存储

  内存分为栈内存堆内存代码段以及数据段

  对象的名称保存在栈内存中,是个指向堆内存中某个对象的地址

  堆内存中保存了该对象的属性(名/值)以及方法名,方法名指向代码段

  代码段即对象的方法的具体代码

相关文章
相关标签/搜索