zoukankan      html  css  js  c++  java
  • 《javascript语言精粹》——第3章对象

    第三章:对象:

    属性名字:可以是包括空字符串在内的任意字符串;

    属性值:是除undefined值之外的任何值;

    【1】、对象字面量:

      var obj={}; //空对象

      var obj = new Object();//空对象

      var newobj={

      name:"小明",  

      age:17,

          school:{

        class:"一班"

      }

     };

    属性名可加引号,也可不加

    【2】、检索

      newobj["name"] //小明

      newobj.age  //17  推荐使用.可读性更加好,紧凑

      newobj["name1"]  //若检索不存在的属性,则返回undefined值

    ||运算符可以用来填充默认值

       var test=newobj["name"]||"none";

    &&运算符来避免错误

      var test1=newobj["newname"];   //undefined

      var test2=newobj["newname"].model; //throw "type.error"

      var test3=newobj.newname&&newobj.newname.model; //undefined

    【3】、更新

      newobj["newname"]="小花";

      newobj.nickname="小三";

      newobj.family={

        mother:"老妈",

        father:"老爸"

      };

      若该属性名存在于该对象中,那么就是直接复制替换,若该属性值不存在于该对象中,那么直接扩充到该对象中,成为该对象的属性!

    【4】、引用

      var x=newobj;

      x.nickname="小四";

      var nick=newobj.nickname; //小四

      var a={},b={},c={};

        //引用不同的空对象

      a=b=c={};

        //引用同一个空对象

    【5】、原型

      if(typeof Object.beget!=="function")
      {
        Object.beget=function(o){
        var f=function(){};
        f.prototype=o;
        return new f();
        };
      }

      var anotherObj=Object.beget(newobj);
      newobj.brother="小弟"; //对作为原型对象的对象,若更新属性或者扩充属性,都会使基于该原型创建的对象可见,

    但是,对于原型链接更新是,也就是基于原型创建的对象在改变时,不会触及到原型.原型连接只有在检索值的时候才会被用到。

    检索顺序是:原型对象----》原型---》Object.prototype,若想要的属性不存在原型链中,就会返回undefined,该过程称之为委托。
      alert(anotherObj.brother); //小弟

    【6】、反射

      typeof操作符确定属性的类型

      newobj.hasOwnProperty("brother") ;//true,因为brother是newobj对象中独有的属性

      newobj.hasOwnProperty("constructor");//false,因为constructor不是newobj对象中的独有的属性,别的对象也都有constructor

    【7】、枚举

      var name;
      for(name in anotherObj){ //声明的name变量,用来临时装对象中的所有属性
        if(typeof anotherObj[name]!=="function"){
          document.writeln(name+":"+anotherObj[name]); //运行出来的顺序是不确定的
        }
      }

      var i;
      var prop=[
        "name",
        "nickname",
        "age",
        "brother"
      ];
      for(i=0;i<prop.length;i++)
      {
        document.writeln(prop[i]+":"+anotherObj[prop[i]]);//name:小明 nickname:小三 age:17 brother:小弟
      }

    【8】、删除

      delete anotherObj.name;

      alert(anotherObj.name); //小明,不会删除原型链中的任何对象

      delete newobj.name;

      alert(newobj.name);//undefined

      delete newobj.name;

      alert(anotherObj.name);//undefined

      

      

      

  • 相关阅读:
    DateTime.Now.ToString("yyyy/MM/dd") 时间格式化中的MM为什么是大写的?
    新入门PGSQL数据库(尝试利用PGPOOL实现分布式),摘录笔记
    MongoDB入门教程之C#驱动操作实例
    使用MongoDB C#官方驱动操作MongoDB
    【OOAD】OOAD概述
    【OOAD】设计模式概述
    【OOAD】面向对象设计原则概述
    【OOAD】OOP的主要特征
    深入浅出设计模式——访问者模式(Visitor Pattern)
    深入浅出设计模式——模板方法模式(Template Method Pattern)
  • 原文地址:https://www.cnblogs.com/angelgril/p/3818160.html
Copyright © 2011-2022 走看看