博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript之对象
阅读量:6200 次
发布时间:2019-06-21

本文共 2877 字,大约阅读时间需要 9 分钟。

一、创建对象

  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() + "
"); }

    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("
" + newman.name + "," + newman.Age);  //输出反序列化后的对象的属性

 

转载地址:http://arvca.baihongyu.com/

你可能感兴趣的文章
Java回调机制如何理解?
查看>>
mybatis mapper里面>= ,<=转义
查看>>
Android实时监听网络状态
查看>>
9.2 grep(中)
查看>>
11.32 php扩展模块装安装
查看>>
Java内存分析
查看>>
来自Google资深工程师的API设计最佳实践
查看>>
为什么区块链世界既需要计算机科学家也需要经济学家?
查看>>
微服务config-server配置环境切换改造
查看>>
Step by Step 真正从零开始,TensorFlow详细安装入门图文教程!帮你完成那个最难的从0到1...
查看>>
干货 | 理解以太坊的第2层扩展方案
查看>>
虚拟货币测评之四——比特币现金(一)
查看>>
Apache的3种工作模式 (资源)
查看>>
[学习微服务-第3天] ServiceComb内置高性能网关服务
查看>>
谨慎的使用本地方法(54)
查看>>
hints
查看>>
C++中的函数指针
查看>>
再有人问你volatile是什么,就把这篇文章发给他
查看>>
一线实践 | 借助混沌工程工具 ChaosBlade 构建高可用的分布式系统
查看>>
在Linux CentOS7系统中安装开源CMS程序OpenCart
查看>>