zoukankan      html  css  js  c++  java
  • 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();
  • 相关阅读:
    hdu 4521 小明系列问题——小明序列(线段树 or DP)
    hdu 1115 Lifting the Stone
    hdu 5476 Explore Track of Point(2015上海网络赛)
    Codeforces 527C Glass Carving
    hdu 4414 Finding crosses
    LA 5135 Mining Your Own Business
    uva 11324 The Largest Clique
    hdu 4288 Coder
    PowerShell随笔3 ---别名
    PowerShell随笔2---初始命令
  • 原文地址:https://www.cnblogs.com/chenjinxinlove/p/5199116.html
Copyright © 2011-2022 走看看