javascript之对象
一、创建对象
1、对象直接量。
var point = { x:0,y:0 }; //point就是一个对象,跟C#不同,它不需要一定有类才能创建对象。
2、通过new创建对象
var d = new Date(); //创建一个Date对象
3、原型
Object.prototype //用于获取对象原型的引用。所有对象都直接或间接继承自Object.prototype,相当于C#中的System.Object();
通过new Date()创建的对象同时继承自Date.prototype和Object.prototype。
4、Object.create()
Object.create()是一个静态函数,可以用它创建一个新对象。
二、属性的读取和设置
1、属性的读取有两种方法。可以通过"."和"[]"来读取。
如:var author = book.author;
var author = book["authoe"];
设置也一样:
book.author = "刘德华";
book["author"] = "刘德华";
注意,如果对象的属性名与保留字一样,则必须通过方括号读取。
如:book["class"];
另外用方括号访问就个好处,就是在运行时确定属性名如book["author" + 1];
2、继承
如果要查询对象o的属性x,如果o没有属性x,则会到o的原型去查,一级一级往上,直到Object.prototype。
var o = {};
o.x = 1;
var p = Object.create(o);
p.x = 2; //改变了继承的属性x
document.write(p.x); //输出2,p.x继承自o.x
var q = Object.create(o);
document.write(q.x); //输出1,p改变的是自己x,改变不了原型的x
同时对原型链属性的操作并不会真正更改原型链,只是在子对象中增加了一个同名属性。更改是只是改了自己。
三、删除属性
delete() delete()方法只能够删除自有属性,不能够删除继承属性。delete()只是断开属性和宿主对象的联系,而不回去操作属性中的属性。
var book = {
author:"刘德华",
number:123
}
delete book.author; //此行代码也可写成delete book["author"]
document.write(book.author); //book.author的值为undefined,因为已经被删除了
四、检测属性
in:检测某对象是否含有某个属性
var o = {
x:1
}
document.write("x" in o); //返回true x是o的一个属性
document.write("y" in o); //返回false y不是o的属性
hasOwnProperty() 检测对象中是否含有某属性
var o = {
x : 1
}
document.write(o.hasOwnProperty("x")); //返回true o中含有名为"x"的属性
document.write(o.hasOwnProperty("y")); //返回false o中不含有名为"y"的属性
propertyIsEnumerable() 检测到是自有属性且这个属性的可枚举性,两者都返回true它才返回true。继承属性返回false。
var o = { x: 1,y:2,z:3 };
for (p in o) {
if (!o.hasOwnProperty(p)) { //跳过继承的属性
continue;
}
if (typeof o[p] === "function") { //跳过方法
continue;
}
document.write( p.toString() + "<br/>");
}
get() set()属性访问器 没有相应的get(),set()则为只读,或只写属性。
var o = {
x: 1,
get getx(){ return this.x; },
set setx(n){this.x = n;}
};
document.write(o.getx); //读取属性值,返回1
o.setx = 2; //如果将set setx(n)这行注释,则这行代码可以相当于不存在,设置无效。x依然为1,但不会报错。
document.write(o.getx); //再次读取返回2
五、属性的特性
writeable:是否可写。
enumerable:是否可枚举。
configurable:是否可配置。
六、对象的序列化
这个东西非常有用,能够将对象序列化成字符串之后传输,也能够将对象以字符串的格式存在cookie里,拿出来后再反序列化成对象。
JSON.stringify() 序列化对象(对象转成字符串便于传输)
JSON.parse() 反序列化对象(字符串转换成原对象,是源对象深拷贝)
var man = { name: "张三", Age: 24 };
var str = JSON.stringify(man); //将对象man序列化成JSON字符串
document.write(str);
var newman = JSON.parse(str); //将字符串反序列成对象
document.write("<br/>" + newman.name + "," + newman.Age); //输出反序列化后的对象的属性
javascript之对象的更多相关文章
- javascript 全局对象--w3school
JavaScript全局对象 1. decodeURI()解析某个编码的URI. 2.decodeURInComponent()解析一个编码的URI组件. 3.encodeURI()把字符串编码为U ...
- JavaScript Json对象和Json对象字符串的关系 jsonObj<->JsonString
JavaScript Json对象和Json对象字符串的关系 jsonObj<->JsonString 如下示例: 直接写的a1就是一个Json对象,a2 就是一个Json对象字符串; 通 ...
- 从零构建JavaScript的对象系统
一.正统的类与继承 类是对象的定义,而对象是类的实例(Instance).类不可直接使用,要想使用就必须在内存上生成该类的副本,这个副本就是对象. 以Java为例: public class Grou ...
- 关于javascript自定义对象(来自网络)(最近几天不会的)
javascript定义对象的几种简单方法 1.构造函数方式,全部属性及对象的方法都放在构造方法里面定义 优点:动态的传递参数 缺点:每创建一个对象就会创建相同的方法函数对象,占用大量内存 funct ...
- 据说每个大牛、小牛都应该有自己的库——JavaScript原生对象拓展
在据说每个大牛.小牛都应该有自己的库——框架篇中我扬言要做个小牛,没想到一天没更新,小伙儿伴们就戏谑的问我,油哥是不是要太监了?其实事情是这个样子的,这不是太监的节奏,一是,关于写个自己的库的想法由来 ...
- JavaScript RegExp 对象
JavaScript RegExp 对象 RegExp 对象用于规定在文本中检索的内容. 什么是 RegExp? RegExp 是正则表达式的缩写. 当您检索某个文本时,可以使用一种模式来描述要检索的 ...
- JavaScript String 对象
JavaScript String 对象 String 对象 String 对象用于处理文本(字符串). String 对象创建方法: new String(). 语法 var txt = new S ...
- JavaScript Math 对象
JavaScript Math 对象 Math 对象 Math 对象用于执行数学任务. Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math(). 语法 var ...
- JavaScript Number 对象
JavaScript Number 对象 Number 对象 Number 对象是原始数值的包装对象. Number 创建方式 new Number(). 语法 var num = new Numbe ...
- JavaScript Array 对象
JavaScript Array 对象 Array 对象 Array 对象用于在变量中存储多个值: var cars = ["Saab", "Volvo", & ...
随机推荐
- ASP.NET MVC3快速入门——第四节、添加一个模型
在本节中我们将追加一些类来管理数据库中的电影.这些类将成为我们的MVC应用程序中的“模型”部分.我们将使用一个.NET Framework的被称之为“Entiry Framework”的数据访问技术来 ...
- IP防护等级
IP(INGRESS PROTECTION)防护等级系统是由IEC(INTERNATIONAL ELECTROTECHNICAL COMMISSION)所起草,将电器依其防尘防湿气之特性加以分级.这里 ...
- C51工具是怎么进行覆盖分析的
C51工具针对8051微控制器的有限存储器资源进行了优化设计. 为了最有效地利用存储器,根据一个很容易解释的方法,自动变量和函数参数在存储器中均进行覆盖处理. 首先,连接器根据源程序生成调用树.例如: ...
- 如何成为一个牛逼的C/C++程序员?
这个题目的噱头太大,要真的写起来, 足够写一本书了. 本人是过来人, 结合自身的体会和大家交流一下,希望新人能少走弯路. 每个人的情况不一样,我下面的描述可能并不适合每一个看到这篇文章的人. 一.C/ ...
- PowerShell_零基础自学课程_3_如何利用Powershell ISE调试PS脚本
微软在推出PS的同时,没有忘记其一贯的作风,什么东东都弄一个IDE环境,这不微软没有忘记给PS也来一个IDE的环境, 通过这个IDE环境,可以建立psl文件,可以调试psl文件. 1.IDE界面 我们 ...
- UltraChart画柱状图上面显示数值
http://www.cnblogs.com/kevin-h-wang/archive/2013/06/05/UltraChart.html 1.柱状图上显示数值 ? //第一种方法 this.Ult ...
- 【Android】使用BaseAdapter实现复杂的ListView
步骤 使用BaseAdapter实现复杂的ListView的步骤: 1. 数据你要准备好 List getData(). 2. 继承ListActivity专有屏,不再需要setContentView ...
- c++ 07
一.多重继承 1)子类同时拥有两个或两个以上的基类,同时继承了所有基类的属性和行为. 销售员 经理 \ / 销售经理 汽车 客用特性 商用特性 \ | / ...
- hihoCoder 1116 计算 (线段树)
题意 : 描述 现在有一个有n个元素的数组a1, a2, ..., an. 记f(i, j) = ai * ai+1 * ... * aj. 初始时,a1 = a2 = ... = an = 0,每次 ...
- hdu 5245 Joyful(期望的计算,好题)
Problem Description Sakura has a very magical tool to paint walls. One day, kAc asked Sakura to pain ...