• JavaScript 中的Object的使用详解笔记(一)


    昨天的学习笔记,今天更新上。第三遍看oop,还是理解的比较到位了。
     
    1、JavaScript的组成:ECMAScript(最新6) + DOM + BOM
    2、数组与对象的应用:
    object的基础学习:
    对象的分类:js内置类(Number);宿主环境(window);自己创建
    对象里面有属性也有方法
    创建对象的几种方式
    主要分为三种方式:字面量、new() 、create();
    属性的一些方法:
    1、遍历  for(sx in  p){} 反射式循环注意是无序的:Object.keys(p);返回数组类型的key就可以进行排序了。
    一。字面量的方式
    1、使用括号的的方式:json 的形式 (字面量 )
    var one  ={   name:"chen", age:31,sex:"man"}
    typeof one
    "object"
    a、其中get与set的使用方法:
    1、get与set是方法,因为是方法,所以可以进行判断。
    2、get是得到 一般是要返回的   set 是设置 不用返回
    3、如果调用对象内部的属性约定的命名方式是_age
     
    b、其中对象的两种访问方式
    .的方式   []的方式
    例如创建了:var o = {1:"abc"} 使用o.1保错  只有使用 o["1"]来访问
    在循环等方式用[]比较好
    c、没有的时候回返回undefault
    d、级联访问
     
    二、new()方法创建
     
    1、使用Object构造函数来创建对象:
     var one = new Object();   使用了Object的关键字
    one.name="chen";
    one.age=21;
    one.name;
    chen
    one["name'];
    chen
     
    a、使用defineProperty可以设置属性:
         
    Object.defineProperty(object, propertyname, descriptor)
    向对象添加多个属性或修改多个现有属性,可使用 Object.defineProperties 
    可以设置属性
    1、不可写:Object.defineProperty(obj, "newDataProperty", { writable: false });
    Object.defineProperty(car,'wheels',{value:4,writable:false});
    Object {wheels: 4}
    car.wheels = 5;
    5
    car.wheels
    4
              2、添加访问器属性   
    a、configurable : true, 可配置特性当设置为true时,属性可以从父对象中删除,未来还可以修改属性的描述符;当设置为false时,属性的描述符会被锁定,无法修改。可以将属性的configurable特性设为false。用于保护对象不被修改,这是一种防御性的编程方式。又得内置对象的感觉:
    var car = {};
    Object.defineProperty(car, 'doors' , { configurable: true, value:4 });
    delete car.doors;
    =>true
    car.doors;
    =>undefined
    Object.defineProperty(car, 'doors' , { configurable: false, value:4 });
    =>Object {doors: 4}
    delete car.doors;
    =>false
    car.doors;
    =>4
    b、可枚举特性(enumberable)如果对象的属性可以使用代码来遍历,那那些属性就是可以枚举的。当将其设为false时。那些属性不能被遍历。
    var car = {};
    Object.defineProperty(car,'doors',{writable:true,configurable:true,enumerable:true,value:4});
    Object {doors: 4}
    console.log(Object.keys(car));
    => ["doors"]
    Object.defineProperty(car,'doors',{writable:true,configurable:true,enumerable:false,value:4});
    Object {doors: 4}
    console.log(Object.keys(car));
    => []
    3、捡视对象
    a、Object .getOwnPropertyDescriptor  可以详细的告诉我们对象属性的配置
         Object.getOwnPropertyDescriptor(car,'doors');
         =>Object {value: 4, writable: true, enumerable: false, configurable: true}
     
              b、Object .getOwnPropertyNames 可以返回对象属性的名字,包括那些不能枚举的:
                   console.log(Object.getOwnPropertyNames(box).sort());
              c、Object .getPrototypeOf 返回特定对象的原型。有时还可以使用__proto__方法来替代哪个方法
              var a = {} ;
              console.log(Object.getPrototypeOf(a) === Object.prototype && Object.prototype === a.__proto__);
              => true
              d、Object .hasOwnProperty  (“name” in p   )一样 JavaScript的原型链可以让你通过遍历一个对象的实例,返回所有可枚举的属性,包括不存在于哪个对象上但是存在于原型链中的属性。hasOwnProperty方法可以让你分辨出某个属性师傅存在于对象的实例中:
              e、Object .keys   返回对象中可枚举的属性 
              f、Object .isFrozen 如果对象不能拓展,属性也不能修改,那么哪个方法返回true,反之false
              g、Object .isPrototypeOf  哪个方法在对象的整整个原型链中检查每一环,看传入的对象师傅存在于其中:
                   Object.prototype.isPrototypeOf([]);
                   =>ture
                   Function.prototype.isPrototypeOf(()=>{});
                   =>true
                   Function.prototype.isPrototypeOf(function(){});
                   =>true
                   Object.prototype.isPrototypeOf(()=>{});
                   =>true
              e、isExtensible 可以使用哪个来检查哪个对象是否可被修改
              h、Object .isSealed   Object.valueof 
              j、 Object.is 可以判断两个参入的参数,在需要强制转换的情况下,是否具有相同的值。
              Object.is('ture','ture')
    =>true
    Object.is('Ture','ture')
    =>false
    Object.is(undefined,Math.prototype)
    =>true
    4、修改对象
         a、Object.freeze   冻结对象可以防止它再次被改变。被冻结的对象不能加入新的属性,已有的属性也不能被移除,已有的属性值也不能被改变:
              var bombPop = {wrapping: 'plastic',flavors:['Cherry','LIME','CHEN']};//创建对象
     
    console.log(Object.isFrozen(bombPop))   //检查是否不可修改
     =>false
    delete bombPop.wrapping;//删除一个属性
    =>true
    console.log(bombPop.wrapping);//删除成功
    =>undefined
    Object.freeze(bombPop);//冻结属性
              delete bombPop//     删除一个属性
    false //删除失败
    bombPop.flavors
    ["Cherry", "LIME", "CHEN"]
           b、Object.defineProperties   允许定义新的属性或修改已有的属性
              <script type="text/javascript">
        var car = {} ;
        Object.defineProperties (car, {
                    'wheels' : {
                        writable: true,
                        configurable: true,
                        enumerable: true,
                        value:4
                    },
                    'doors' : {
                        writable: true,
                        configurable: true,
                        enumerable: true,
                        value: 4
                    }
                }
        );
        console.log(car.doors);
        //=>4
        console.log(car.wheels);
        //=>4
             </script>
         c、Object.defineProperty   允许定义新的属性或修改已有的属(一个)
         d、Object.preventExtentsions 哪个函数可以阻止新的属性被加到一个对象中,与冻结的区别是:可以删除
              var car ={doors:4}
    Object.isExtensible(car) ===true //检查是否可以修改
    =>true
    Object.preventExtensions(car)//冻结
    Object.isExtensible(car) ===true
    =>false  //不该修改了
    car.doors
    =>4
    delete car.doors; //但是可以删除
    =>true
    car.doors
    =>undefined
    car.tires = 4  //也不能新增
    =>4
    car.tires
    =>undefined
              e、Object.prototype
                   通过设定对象原型,是对象从现在的原型链解耦,并将此对象加到对象的原型链尾部。哪非常有用,可以吧其他对象的属性和方法,加到已有对象中:
    3、使用有参构造函数。
    function one(name,age)
    {
         this.name=name;
         this.age   =age;
         this.eat=function(){}
     
    }
    var person = net one("chen",5);实例化 创建对象
    person.age();  调用name属性
    4、使用prototype关键字  原型对象的方式  建立联系
     
     
     
    function person () {}
    person.prototype.name="chen";
    person.prototype.eat=function(){}
    var chen = new person();
    person.eat();
    5、利用混合模式原型加函数有点继承的味道
    - function Car(name,price){
    - this.name=name;
    - this.price=price;
    - }
    - Car.prototype.sell=function(){
    - alert("我是"+this.name+",我现在卖"+this.price+"万元");
    - }
    -
    - var camry =new Car("凯美瑞",27);
    - camry.sell();
  • 相关阅读:
    STM32学习中出现的错误
    原码 反码 补码 移码
    LiauidCrystal
    gpio 的配置
    ARM7探究
    导轨控制问题
    A4988驱动42步进电机
    arduino驱动oled
    计算机组成原理
    arduino basic issue
  • 原文地址:https://www.cnblogs.com/chenjinxinlove/p/5199116.html
Copyright © 2020-2023  润新知