JavaScript总结3—对象
对象是JavaScript的基本类型,他可以从一个称为原型的对象继承属性,这种原型式继承是JavaScript的核心特征。对对象比较常见的操作有:创建,设置,查找,删除,检测和枚举他的属性。每个对象都拥有3个对象特性:对象的原型,对象的类,对象的扩展标记。
一、对象的创建
1.使用对象直接量
var o = { x : 1, y : 2 }; 这就是对象直接量的表达式,他每次运算都创建并初始化一个新的对象。最好不要将属性名取成和关键字一样的。
2.通过new创建对象
var d = new Date(); 不仅仅可以new内置的对象,还是new自定义的对象。
3.通过Object.create()创建
var o2 = Object.create(o); 第一个参数为o2的原型,必须有。若第一个参数为null ,则他是个没有原型的对象。若第一个参数为Object.prototype,则他是个空对象。
二、查询和设置
有两种方法,一个是用 . 还有一个用 [ ] 。如 o.x 和 o["x"] 都可以访问和设置对象o的x属性。
1.对象属性名是个关键字那么只有用中括号去访问。
2.属性名是个不确定的参数,那么也用中括号访问。
3.访问不存在的属性
三、删除属性
delete o.x; 或者 delete o["x"] ; delete运算符只能删除自有属性,不能删除继承属性,也不能删除那些不可配置的属性。他的返回值是true\false。若删除一个对象自身没有的属性,返回是true
四、检测属性
1. in 运算符
"x" in o2 ;// 返回true 。左边字符串是属性,右边是对象,判断这个对象是否有这个属性。in会顺着原型链查找。
2. hasOwnProperty 函数
o2.hasOwnProperty("x") ; //返回false。他判断o2自身是否有x属性,不会查找原型链。
3. propertyIsEnumerable 函数
o2.propertyIsEnumerable("x") ; //返回false。他判断x 是否是o2的自身的并且可枚举的属性。
五、枚举属性
枚举属性用for-in循环。for(var i in o2){ console.log(i); } ,但是这种会把原型链上的可枚举属性都循环出来。
要取自身的属性,用hasOwnProperty判断。
for(var i in o2){
if(o2.hasOwnProperty(i)){
console.log(i);
}
}
六、getter和setter
对象的属性值可以用一个或两个方法代替,他们分别是getter和setter,由getter和setter定义的属性称作存取器属性。
var o = {
x:1,
y:2,
get r() { return this.x + this.y; },
set r(data){ return this.x + this.y + data; },
get s(){ return this.x * this.y; }
};
console.log(o2.x);
console.log(o2.s);
他的作用有:检测属性的输入值,改变读取属性的返回值…
七、属性的特性
对象的数据属性应该是包含了一个属性名和四个特性:值(value),可写性(writable),可枚举性(enumerable)和可配置性(configurable)。想看一个属性的这个特性的值,可以用Object.getOwnPropertyDescriptor。
eg : Object.getOwnPropertyDescriptor(o,"x"); // 查看对象o中x属性的特性,他只能用于自身属性
这四个特性是可以设置的。Object.defineProperty();
eg: Object.defineProperty(o,"x",{value:3,writable:false,enumerable:false,configurable:false});
这个函数的第三个参数属性描述符对象不必包含所有的4个特性。
八、关于类
在js中,类的实现是基于原型继承机制的。在创建对象的3中方式中,有一种用new关键字创建一个新的对象,他就相当于一个构造函数。一个普通的函数通常约定,作为构造函数的函数,首字母应该大写。
var O3 = function(){
this.x = 1;
this.y = 2;
};
var o4 = new O3(); //o4就是o3类的对象。
o4是以O3为原型的一个新对象。此时o4具有一个属性:constructor。这个属性指向的是他的构造函数,即O3。而o4的prototype也是o3。
console.log("o4 constructor :" + o4.constructor);
console.log("o4 prototype :" + Object.getPrototypeOf(o4));

instanceof 运算符 :o4 instanceof o3 //true
他的左操作符是一个对象,右操作符是定义这个对象的构造函数。他其实是检测对象的原型链上是否有这个类。
九、原型和原型链
除了null以外,每个对象都和一个原型关联。所有通过对象直接量创建的对象,原型为Object。通过new出来的对象,他的原型就是构造函数的prototype的值。例如:通过new Object()出来的对象,原型是Object.prototype(他没有原型对象了),通过new Array()创建的对象原型就是Array.prototype。所有的内置构造函数都具有一个继承自Object.prototype的原型,例如通过new Date()出来的对象原型是Date.prototype,而Date.prototype属性继承于Object.prototype,所以这个对象同时继承了Date.prototype和Date.prototype,这系列的继承被称为原型链。
在原型链上查找和修改属性。例如,用前面的列子,查询o2.x 首先查询o2是否具备x属性,若不存在,则顺着他的原型链的上一级(o2.prototype)查找,发现他的上一级是o,然后看o中有没有x,有就返回这个x,若没有,继续顺着o的原型链向上查找,若最后找完还是没有,返回undefined。当修改o2.x的属性时,首先检查原型链,判断是否允许赋值操作。若允许,那么修改操作也只会在o2上创建一个新的属性或对o2自身已有的属性进行修改,不会动原型链上的任何属性,这样做,若有同名属性则会覆盖掉原型链上的属性。注意:原型链只有在查询属性值时才会被用到。可以在原型链上添加函数,然后继承这个原型的类就可以调用这个函数。
o3.prototype.add = function(){
return this.x + this.y;
};
o4.add();
JavaScript总结3—对象的更多相关文章
- javascript是判断对象是否是数组
JS中的数据类型: 2大类 原始类型:值保存在变量本地的数据类型 5种:Number String Boolean undefined null Number:8bytes 舍入误差-->四舍五 ...
- JavaScript 基础回顾——对象
JavaScript是基于对象的解释性语言,全部数据都是对象.在 JavaScript 中并没有 class 的概念,但是可以通过对象和类的模拟来实现面向对象编程. 1.对象 在JavaScript中 ...
- javascript中的对象,原型,原型链和面向对象
一.javascript中的属性.方法 1.首先,关于javascript中的函数/“方法”,说明两点: 1)如果访问的对象属性是一个函数,有些开发者容易认为该函数属于这个对象,因此把“属性访问”叫做 ...
- Javascript 中判断对象为空
发现了一个巧妙的实现: 需要检查一个对象(Object)是否为空,即不包含任何元素.Javascript 中的对象就是一个字典,其中包含了一系列的键值对(Key Value Pair).检查一个对象是 ...
- JavaScript 中的对象
JavaScript 中的对象 在 JavaScript 中,对象是数据(变量),拥有属性和方法. JavaScript 中的所有事物都是对象:字符串.数字.数组.日期,等等. 访问对象的属性 访 ...
- 使用JavaScript的history对象来实现页面前进后退(go/back/forward)。
我们都知道JavaScript有history对象,主要是用来记录浏览器窗口的浏览记录.但是,JS脚本是不允许访问到这个记录里面的内容(隐私). 常见的用法是: history.back();//返回 ...
- javascript类型系统——Math对象
× 目录 [1]常量 [2]函数 前面的话 javascript使用算术运算符实现基本的算术运算,如果要实现更加复杂的算术运算,需要通过Math对象定义的常量和函数来实现.和其他对象不同,Math只是 ...
- javascript中Date对象的应用——简易日历的实现
× 目录 [1]效果 [2]HTML [3]CSS[4]JS 前面的话 简易日历作为javascript中Date对象的常见应用,用途较广泛.本文将详细说明简易日历的实现思路 效果演示 HTML说明 ...
- JavaScript学习04 对象
JavaScript学习04 对象 默认对象 日期对象Date, 格式:日期对象名称=new Date([日期参数]) 日期参数: 1.省略(最常用): 2.英文-数值格式:月 日,公元年 [时:分: ...
- JavaScript学习笔记——对象知识点
javascript对象的遍历.内存分布和封装特性 一.javascript对象遍历 1.javascript属性访问 对象.属性 对象[属性] //字符串格式 //javascript属性的访问方法 ...
随机推荐
- HDU 4081 Qin Shi Huang's National Road System 最小生成树
分析:http://www.cnblogs.com/wally/archive/2013/02/04/2892194.html 这个题就是多一个限制,就是求包含每条边的最小生成树,这个求出原始最小生成 ...
- Tomcat普通用户启动注意事项
今天项目部署上线,老大跟我建议说不要使用root用户部署,试用普通用户运行.刚开始没想什么,后来部署的时候碰到各种权限问题. 记录一下,以防忘记了. 1.使用普通用户启动失败. 首先不用想就去$TOM ...
- mapreduce学习指导及疑难解惑汇总
原文链接http://www.aboutyun.com/thread-7091-1-1.html 1.思想起源: 我们在学习mapreduce,首先我们从思想上来认识.其实任何的奇思妙想,抽象的,好的 ...
- rpi good tutorial
http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/quick-start/
- HDU 3436--Queue-jumpers (树状数组 or Splay Tree)
树状数组这个真心想了好久,还是没想出来 %%% www.cppblog.com/Yuan/archive/2010/08/18/123871.html 树状数组求前缀和大于等于k的最大值,第一次看到这 ...
- 集合框架-Map练习-记录字母出现的次数
/* * 练习: * 字符串"abcb453 sddbs343bsjvAJBBDVBs21768723",获取该字符串中,每一个字母出现的次数. * 要求打印结果是:a(2)b ...
- 【C语言】-选择结构-if语句
if语句:也可称条件语句,是根据所给定条件的值是真还是假决定执行不同的分支. if语句有单分支.双分支.多分支以及if语句的嵌套等多种形式. 单分支if语句: if (条件表达式) { 语句组1; } ...
- emWin -- 模拟器系列1 - 如何建立模拟器开发环境
面对如此强大的emWin,大家是否都有跃跃欲试的冲动呢?但是没有硬件可以调试的童鞋,难道只能望洋兴叹?非也.非也.Segger公司早就考虑到了.Segger推出模拟器的目的不仅仅是为了解决没有硬件的烦 ...
- PowerDesigner实用技巧小结(4)
下述十四个技巧,是许多人在大量的数据库分析与设计实践中,逐步总结出来的.对于这些经验的运用,读者不能生帮硬套,死记硬背,而要消化理解,实事求是,灵活掌握.并逐步做到:在应用中发展,在发展中应用. 1. ...
- Postgresql:prepared statement "S_1" already exists
近期由于业务需要和一些json的存储查询需要,把新的应用切到pgsql上来,刚刚切好,是可以正常使用的,但是偶尔会来一下 java连接pgsql 偶尔出现 这个错. org.postgresql. ...