Object的简单学习

Object:

        ECMAScript是一门面向对象的语言。却不具备传统面向对象语言所拥有的类和接口等基本结构。

1、对象:类的实例化体现,类是对象的抽象体现。

        对象是一个个体,他具备自身类的所有属性和方法。

2、新建对象

        新建对象的第一种方法

        第一个案例

   var obj=new Object();   //创建一个新的对象
   obj.name="张三";   //对象属性和属性值的第一种用法 : obj.属性=属性值
   obj.fire=(function () {   //方法属性  方法函数 的第一种用法: obj.方法=方法函数
       console.log("生火");    //打印输出
   })();

        第二个案例

        设置五种不同的对象

     obj["name"]="张三";   //对象属性和属性值的第二种用法:obj[属性]=属性值

     obj["fire1"]=function () {  //方法属性  方法函数 的第二种用法:obj[方法]=方法函数
         console.log("生火1");
     };

     obj["fire2"]=function () {
         console.log("生火2");
     };

     obj["fire3"]=function () {
         console.log("生火3");
     };

     obj["fire4"]=function () {
         console.log("生火4");
     };

     for(let i=1;i<5;i++){   //对创建的五个对象进行循环
         obj["fire"+i]();
     }

        第三个案例

    var arr=new Object([]);   //创建一个数组
    arr.push("aaa");      //将"aaa"添加到数组里面
    console.log(arr)*/    //打印输出数组

        新建对象的第二种方法:

    var obj={

          属性:属性值,
          方法:方法函数

        }

        花括号在语言中是指代码块的意思,在obj也相当于一个代码块。obj自身在使用中可以完成和丰富各种代码块。

        第一个案例

         var obj={
             name:"张三",
             fire:doFireHandler
         };

         var obj1={
             fire1:doFireHandler
         }

         function doFireHandler() {
             console.log("生火");
         }

         obj.fire();

        在函数中,有时候需要返回一个对象,这时候,我们通常使用花括号的形式来返回对象

    function abc(){
       return {
            属性:属性值,
            方法:方法函数
       }
    }

        第二个案例

        function abc(_name) {
              return {
                  name:_name,
                  fire:function () {
                      console.log(_name+"生火");
                  }
              }
          }

          var obj=abc("张三");
          var obj1=abc("李四");
          obj.fire();
          obj1.fire();

        新建对象的第三种方法:Object.create(proto, [ propertiesObject ])

        第一个案例

     var obj2=Object.create(obj)
     console.log(obj2)

对象操作方法

1、delete 删除对象的属性

        案例1

         var obj={a:3,b:4}
         delete obj.a;
         delete obj;
         console.log(obj)   //只能删除属性,不能删除对象

        案例2

         this.obj={a:3,b:4};
         delete obj.a;
         delete this.obj;
         console.log(this.obj)    //能删除对象

2、assign()

        1、复制一个对象

        2、合并拷贝

        3、继承属性和不可枚举的属性是不能被拷贝的

3、defineProperties

        给对象定义属性值

      Object.defineProperties(对象,{
           “属性名”:{
                value:属性值,
                        writeable:布尔值
            }
       })

        案例

        var obj={a:1,b:2};
        Object.defineProperties(obj,{
            "c":{
                value:3, //属性值
                writable:true  //是否可被修改
            }
        });
        obj.c=5;
        obj.a=6;

        for(var str in obj){
            console.log(obj[str],obj.c)
        }

4、详细定义对象的属性

        Object.defineProperty(obj, prop, descriptor)

        var obj={};
        Object.defineProperty(obj,“属性名”,{
            enumerable: false,
            configurable: false,
            writable: false,
            value: 属性值
        })

        案例

    var obj={a:1,b:2};
    Object.defineProperty(obj,"c",{
        value:3,  					//该属性对应的值。可以是任何有效的
        writable:false, 				 //是否可写
        configurable:false, 			 //是否可写可删除
        enumerable:true 			 //是否可被枚举
    });
    var o=Object.freeze(obj);//冻结对象,使用该方法以后,不能修改该对象的所有属性,不能删除所有属性。
    for(var str in obj){
        console.log(str,obj[str])
    }
    for(var str in obj){
        var pro=Object.getOwnPropertyDescriptor(obj,str);  //获取对象下属性的描述,也就是使用defineProperty定义的所有属性的描述内容
        console.log(str,pro.writable);
    }

    var arr=Object.getOwnPropertyNames(obj);  //获取对象下所有属性的名称,并返回一个数组,      该数组的内容就是这些属性名,该数组对元素是 obj 自身拥有的枚举或不可枚举属性名称字符串。
    for(let i=0;i<arr.length;i++){
         var pro=Object.getOwnPropertyDescriptor(obj,arr[i]);
         console.log(arr[i],pro.enumerable)
    }

    var obj2={a:1,b:2};
    var bool= Object.is(obj,obj2);   //判断两个对象或者两个内容是否相等
    console.log(bool)
    Object.freeze(obj)  //冻结对象
    console.log(Object.isFrozen(obj))*/  //判断一个对象是否被冻结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值