分类

JavaScript对象分类:

内置对象:由ECMAScript规范定义的对象或类,例如:数组、函数、日期(Date())、正则表达式

宿主对象:是由js解释器所嵌入的宿主环境(比如Web浏览器)定义的。

自定义对象:是由运行中的js代码创建的对象

JavaScript属性分类:

自有属性:直接在对象中定义的属性

继承属性:是在对象的原型对象中定义的属性


创建对象

可以通过对象直接量、关键字new、Object.create()函数创建对象

(1)对象直接量:

  最简单的创建对象方式

 var empty = {};
var point = {x:0,y:0};
var point2 = {x:point.x,y:point.y+1};
var book = {
"main title" : "Javascript", //属性名字有非法字符一定要用字符串形式(或者保留字(for等)也要用字符串)
"sub-title" : "the Guide", //同上
}

(2)new关键字创建对象

  new后跟一个构造函数

  

1 var a = new Array();      //创建一个数组,和[]一样
2 var d = new Date(); //创建一个表示当前时间的Date对象
3 var r = new RegExp("js"); //创建一个可以进行模式匹配的RegExp对象

(3)Object.create()创建对象

  这个方法的第一个参数是这个对象的原型,第二个参数可选,用以对对象的属性进行进一步描述。

  这个函数是一个静态函数,使用方法:

  

var o1 = Object.create({x:1,y:2});   //o1继承了属性x和y

  传入参数如果为null,则会创建一个没有原型的新对象,它不会继承任何东西,甚至不包括基础方法,比如:toString(),也就是说它将不能和“+”运算符一起正常工作。

模拟原型继承:

  1 function inherit(p){
2 if(p==null) throw TypeError(); //若原型对象不存在,则返回错误
3 if(Object.create)
4 return Object.create(p); //若存在这个函数,则直接调用他创建对象
5 var t = typeof p;
6 if(t !== "Object" && t !== "function") throw TypeError(); //若传入的原型对象不是一个对象或者构造函数,则返回错误
7 function f(){}; //定义一个空的构造函数
8 f.prototype = p; //将其原型属性设置为p
9 return new f(); //返回f()创建p的继承对象
10 }

原型:

每一个JavaScript对象(null除外)都和“另外一个对象”相关联,这里的“另一个对象”就是原型对象,我们创建的所有对象都从它的原型对象那里继承属性。

(1)所有通过原型直接量创建的对象都具有同一个原型对象,并可以通过JavaScript代码Object.prototype获得对原型对象的引用。

(2)通过new Object()创建的对象也继承自Object.prototype,new Array()创建的对象继承自Array.prototype...

(3)没有原型的对象:Object.prototype,所有的对象都继承自该对象。

原型链:一个对象继承多个原型对象,这一系列的链接称为原型链。


属性的查询和设置:

访问属性值时的代码书写规范:

(1)对象名.属性名

(2)对象名["属性名"]

第二种方法可以看做是关联数组,即通过字符串作为下标访问属性,这样就可以很方便的更改属性名。这在很多情况下是很方便代码的编写的,比如属性名需要通过用户进行定义。

查询属性值时代码执行过程:

  如果要访问的对象中不存在该属性,则会继续在该对象的原型对象中查询该属性,如果原型对象中也没有该属性,就继续在该对象的原型对象中查找,直到找到x或者查找到一个原型是null的对象为止。这样的查找过程构成了一个"链",也是通过这个链实现继承的。

属性的赋值的几种情况:

(1)如果该对象中已经有该属性,那么将会用新的值覆盖这个属性值。

(2)如果该对象中不存在该属性,赋值操作会给这个对象添加一个新的属性,并赋给它值。

(3)如果之前该对象继承自该属性,那么这个继承的属性就被新创建的同名属性覆盖。

注意:属性赋值操作首先检查原型链,以此判定是否允许赋值操作,例如,如果该对象继承自一个只读属性x,那么赋值操作是不允许的。如果允许属性赋值操作,它也总是在原始对象上创建属性或对已有的属性赋值,而不会去修改原型链。

属性的赋值在以下情况中会失败:

(1)o中的属性p是只读的:不能给只读属性重新赋值(definedProperty())方法中有一个例外,可以对可配置的只读属性重新赋值。

(2)o中的属性p是继承属性,且它是只读的:不能通过同名自有属性覆盖只读的继承属性。

(3)o中不存在自有属性p:o没有使用setter方法继承属性p,并且o的可扩展性是false。如果o中不存在p,而且没有setter方法可供调用,则p一定会添加至o中。但如果o不是可扩展的,那么在o中不能定义新属性。


属性的删除:

delete运算符可以对属性进行删除。它的操作数是一个属性访问表达式,需要注意的是,delete只是断开了属性和宿主之间的联系,而并没有属性中的属性进行操作:

 a = {p:{x:1}};
b=a.p;
delete a.p;

执行完这段代码后,b.x的值依然是1,所以在有些情况中属性的删除要遍历属性中的属性,依次删除,否则会造成内存泄露。

delete运算符只能删掉自有属性,不能删除继承属性,要删除继承属性只能从该对象的原型对象中删除,但要注意这会影响到所有继承该原型对象的对象属性。

delete运算符会返回一个值:

true:删除成功或者没有任何副作用时,即删除一个已经被删除或者不存在的属性或者删除一个非属性的值或者删除一个继承来的属性值

false:

 delete Object.prototype; //不能删除,属性是不可配置的
var x = 1; //声明一个全局变量
delete this.x; //不能删除这个属性
function f(){}; //声明一个全局函数
delete this.f; //也不能删除全局函数

javascript——对象的更多相关文章

  1. json与JavaScript对象互换

    1,json字符串转化为JavaScript对象: 方法:JSON.parse(string) eg:var account = '{"name":"jaytan&quo ...

  2. javaScript对象-基本包装类型的详解

    本人按书上的内容大致地把javaScript对象划分成“引用类型”.“基本包装类型”和“内置对象”三块内容. 我们这篇先了解下基本包装类型的详细用法吧! 一.我们先解下相关概念: 1.引用类型的值(对 ...

  3. 如何理解javaScript对象?

    在我们生活中,常常会提到对象一词,如:你找到对象了吗?你的对象是谁呀?等等. 在我们家庭中,有男友的女青年都会说我有对象了,那么她的对象是XX(她的男友). 夫妻间呢?都会说我的爱人是谁谁谁,现在我们 ...

  4. 简述JavaScript对象、数组对象与类数组对象

    问题引出 在上图给出的文档中,用JavaScript获取那个a标签,要用什么办法呢?相信第一反应一定是使用document.getElementsByTagName('a')[0]来获取.同样的,在使 ...

  5. 深入理解javascript对象系列第二篇——属性操作

    × 目录 [1]查询 [2]设置 [3]删除[4]继承 前面的话 对于对象来说,属性操作是绕不开的话题.类似于“增删改查”的基本操作,属性操作分为属性查询.属性设置.属性删除,还包括属性继承.本文是对 ...

  6. Javascript对象的方法赋值

    Javascript对象编程学习中,一直不能很好的掌握对象的属性(property)和方法(method).今天在写代码过程中,又犯了一个低级错误. <!DOCTYPE html> < ...

  7. web前端学习(二) javascript对象和原型继承

    目录 1. JavaScrpt对象 2. 原型对象和继承 3. 对象的克隆 (1)javascript对象 在JS中,对象是属性的容器.对于单个对象来说,都由属性名和属性值构成:其中属性名需要是标识符 ...

  8. 如何判断Javascript对象是否存在

    Javascript语言的设计不够严谨,很多地方一不小心就会出错. 举例来说,请考虑以下情况. 现在,我们要判断一个全局对象myObj是否存在,如果不存在,就对它进行声明.用自然语言描述的算法如下: ...

  9. JavaScript 对象、DOM对象、jquery对象的区别、转换详解

    一.JavaScript 对象 JavaScript 提供多个内建对象,比如 String.Date.Array 等等. 对象只是带有属性和方法的特殊数据类型. 访问对象的属性: [javascrip ...

  10. 关于javascript对象的简单记忆法

    关于javascript对象方法的简单记忆法(个人整理) string对象: 大号小号闪烁加链接./big/small/blink/link/ 粗体斜体打字删除线./bold/italics/fixe ...

随机推荐

  1. OC中的@的作用研究

    OC中的@字符用的频率很的高,其主要作用是为了差别于其它语言的keyword和语法 以下我们来研究一下其应用 1.声明类,协议,延展,权限,属性等 @interface声明类 @protocol声明协 ...

  2. Kafka框架基础

    * Kafka框架基础 官网:kafka.apache.org 框架简介 Apache Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kaf ...

  3. Oracle 流程控制语句

    分为选择语句循环语句两大类:一 选择语句1 if then ...end;set serveroutput on declare var_name1 varchar2(50):='East'; var ...

  4. UVa 202 Repeating Decimals【模拟】

    题意:输入整数a和b,输出a/b的循环小数以及循环节的长度 学习的这一篇 http://blog.csdn.net/mobius_strip/article/details/39870555 因为n% ...

  5. 51Nod 3的幂的和(扩展欧几里德求逆元)

    求:3^0 + 3^1 +...+ 3^(N) mod 1000000007 Input 输入一个数N(0 <= N <= 10^9) Output 输出:计算结果 Input示例 3 O ...

  6. GoldenGate 应用系统升级

    (仅复制DML时)源端和目标端数据库增减复制表 增加复制表 在GoldenGate的进程参数中,如果通过*来匹配所有表,因此只要符合*所匹配的条件,那么只要在源端建立了表之后GoldenGate就能自 ...

  7. WebRTC Native APIs

    WebRTC Native APIs The WebRTC Native APIs implementation is based on W3C’s WebRTC 1.0: Real-time Com ...

  8. BZOJ5017 炸弹(线段树优化建图+Tarjan+拓扑)

    Description 在一条直线上有 N 个炸弹,每个炸弹的坐标是 Xi,爆炸半径是 Ri,当一个炸弹爆炸时,如果另一个炸弹所在位置 Xj 满足:  Xi−Ri≤Xj≤Xi+Ri,那么,该炸弹也会被 ...

  9. 我的投资案例(3)-看好互联网和金融两大朝阳行业,参投入股垂直金融招聘平台"职业梦CareerDream.cn"

     作为一名喜欢读书,关注中国和欧美国家发展的知识青年,  同时作为一名程序员和对金融投资感兴趣的业余爱好者,本人一直看好  以IT互联网为代表的科技和以投资VC为代表的金融,这2大朝阳行业的发展.   ...

  10. 洛谷 P1443 马的遍历

    P1443 马的遍历 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘 ...