zoukankan      html  css  js  c++  java
  • Object学习笔记

    <script type="text/javascript">

    function forEach(o){
    var html ="";
    for(var i in o){
    html += i+"="+o[i]+" ";
    }
    console.log(html);
    console.log(o);
    }

    //1
    //Object.create(proto)
    //Object.create(proto,descriptors)
    //使用指定的原型和属性来创建一个对象
    //参数:
    //proto:新创建对象的原型,可为null
    //descriptors:一个可选对象,把属性名映射到属性描述符
    //返回一个新创建的对象,继承自proto,同时拥有descriptors所秒速的属性。

    var obj = Object.create({x:1,y:2},{
    z:{value:3,writable:true,enumerable:true,configurable:true}
    });

    forEach(obj)
    obj.z=5
    console.log(obj)

    console.log("=====================================================")

    //2
    //Object.defineProperties(o,descriptors)
    //创建或配置对象的多个属性
    //参数:
    //o:要在其上创建或者配置属性的对象
    //descriptors:将属性名映射到属性描述符的对象
    //返回对象o
    Object.defineProperties(obj,{
    a:{value:"a",writable:false,enumerable:true,configurable:true},
    b:{value:"b",writable:false,enumerable:true,configurable:true}
    })
    forEach(obj);

    console.log("=====================================================")

    //3
    //Object.defineProperty(o,name,desc)
    //创建或配置对象的一个属性
    //参数:
    //o:将在其上创建或配置属性的对象
    //name:将创建或配置的属性名字
    //desc:一个属性描述符对象,描述要创建的新属性或对现有属性的修改
    //返回对象o
    Object.defineProperty(obj,"c",{value:"c",writable:false,enumerable:false,configurable:true})
    forEach(obj);

    console.log("=====================================================")

    //4
    //Object.freeze(o)
    //将一个对象设为不可改变,不会影响继承属性
    //参数:
    //o:要冻结的对象
    //返回 true|false
    var p = {x:1,y:2}
    Object.freeze(p);
    p.x =2;
    console.log(p);
    console.log(Object.isFrozen(p)) //true,一旦冻结 无法解冻

    console.log("=====================================================")


    //5
    //Object.getOwnPropertyDescriptor(o,name)
    //参数:
    //o:一个对象
    //name:待查询的属性名
    //查询一个属性的特性
    //返回对象指定属性的一个属性描述符对象,如果不存在指定属性则返回undefined.
    /*
    属性描述符就是一个普通的javascript对象,描述某个对象的特性,有二种javascript属性。数据属性有一个值以及三个性质:可枚举性(enumerable)、
    可写性(writable)、以及可配置性(configurable).访问器属性(accessor property)有一个getter和/或setter方法,以及可枚举性。

    数据属性的描述符:
    {
    value:任意javascript值,
    writable: true|false,
    enumerable: true|false,
    configurable:true|false
    }

    访问器属性的描述符:
    {
    get: function 或 undefined :替换属性值
    set: function 或 undefined :替换可写性
    enumerable:true|false,
    configurable:true|false
    }

    */

    var o5 = Object.getOwnPropertyDescriptor(obj,"c");
    console.log(o5);
    forEach(o5);

    console.log("=====================================================")

    //6
    //Object.getOwnPropertyNames(o)
    //返回非继承属性的名字
    //参数:
    //o:一个对象
    //返回一个包含o的所有非继承属性的名字,包括哪些不可枚举的属性。{enumerable:false}

    var o6 = Object.getOwnPropertyNames(obj);
    console.log(o6);

    console.log("=====================================================")

    //7
    //Object.getPrototypeOf(o)
    //参数:
    //o:一个对象
    //返回一个对象的原型
    var o7 =Object.getPrototypeOf(obj);
    console.log(o7);

    console.log("=====================================================")

    //8
    //Object.hasOwnProperty(propname);
    //参数:
    //propname包含对象的属性名的字符串
    //检查一个属性是否是继承的
    //返回true|false

    console.log(obj.hasOwnProperty("x")); //=>false
    console.log(obj.hasOwnProperty("z")); //=>true

    console.log("=====================================================")

    //9
    //Object.isExtensible(o);
    //判断某个对象上是否可以添加新属性
    //参数:
    //o:待检查可扩展性的对象
    //返回 能添加为true|不能为false
    //描述:所有的对象在创建的时候都是可扩展的,直到他们被传入 Object.preventExtensions(o) Object.seal(o) 或 Object.freeze(o);
    console.log(Object.isExtensible(obj)); // =>true
    //Object.preventExtensions(obj)//将它设置为不可扩展
    //console.log(Object.isExtensible(obj)); //=>false

    console.log("=====================================================")


    //10
    //Object.isFrozen(o)
    //判断对象是否不可改变
    //参数:
    //o:待检查的对象
    //如果o已冻结并不改变则为true;否则为false;


    console.log("=====================================================")

    //11
    //object.isPrototypeOf(o)
    //判断当前对象是否为另一个对象的原型
    //参数:
    //o:所有对象
    //如果object是o的原型 则为true,如果o不是一个对象或者object不是o的原型 则为false.

    var o = new Object();

    Object.prototype.isPrototypeOf(o) // true

    Array.prototype.isPrototypeOf([1,2]) //true;

    Object.prototype.isPrototypeOf(Function.prototype) //true

    console.log("=====================================================")

    //12
    //Object.isSealed(o)
    //判断一个对象的属性是否可添加或删除
    //参数:
    //o:待检查的对象
    //如果o是封闭的则为true,否则为false.
    //如果不可以向一个对象添加新的(非继承)属性,并且现有的(非继承)属性不可删除,则是封闭的。
    //封闭一个对象常用的方法是Object.seal(o) 或 Object.freeze(o)

    console.log("=====================================================")

    //13
    //object.keys(o)
    //返回自由的可枚举属性名
    //参数:
    //o:一个对象

    console.log(Object.keys({x:1,y:2}) ) //=>[x,y]

    console.log("=====================================================")

    //14
    //Object.preventExtensions(o)
    //禁止在一个对象上添加新的属性
    //参数:
    // o:待设置可扩展的对象
    //一旦设为不可不可扩展,它就再也不能改为可扩展

    console.log("=====================================================")


    //15
    //object.propertyIsEnumerable(propname)
    //检测某个属性是否在for/in 中 循环可见
    //参数
    //propname:包含对象的指定属性名的一个字符串
    //如果对象有一个名为propname的非继承属性,并且该属性可以枚举,则返回true.

    var o15 = new Object();
    o15.x = 15;

    o15.propertyIsEnumerable("x"); //true;
    o15.propertyIsEnumerable("y"); //false;
    o15.propertyIsEnumerable("toString"); //false;

    console.log("=====================================================")

    //16
    //Object.seal(o)
    //阻止添加或删除对象的属性
    //参数
    //o:待封闭的对象
    //返回处于封闭状态的参数对象o


    //17
    //Object.toLocaleString()
    //返回对象本地的本地化字符串标示
    //Object类提供的默认的toLocaleString()方法只是简单的调用toString()方法。
    //不过要注意,其他类(Array、Date、Number等)都各自定义自己的这个方法的版本。用于执行本地化字符串转换。定义自己的的类时,可能也需要覆盖这个方法。


    //18
    //object.toString()
    //定义一个对象的字符串表示形式
    //在javascript程序中一般不会经常显示的调用toString()方法。一般情况下,在对象中定义这个方法,系统会在需要时自动调用它以便将该对象装换成字符串。


    //19
    //Object.valueOf()
    //给定对象的原始值
    //返回 与指定对象关联的原始值,如果存在这样一个值的话,如果没有与改对象关联的值,则返回对象本身

  • 相关阅读:
    navicat 创建查询失败 can not create file
    使用Themeleaf时, HTML内嵌的JS代码需要注意< 和 >的问题
    window下查杀占用端口的进程
    Spring MVC的Rest URL 被错误解析成jsp, 导致404错误(XML方式下@Controller和@RestController需要配置<mvc:annotation-driving/>)
    一个本地DNS解析和mysql授权导致的Mysq连接失败问题(Access denied for user 'loan'@'kfcsdb1' (using password: YES))
    taglib报错The content of element type "taglib" must match "(tlib-version,...)
    cvc-complex-type.2.4.a: Invalid content was found starting with element 'display-name'
    在eclipse中运行spring web application时的异常: java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
    Spring3升级到Spring4时, 运行时出现找不到MappingJacksonHttpMessageConverter的情况
    如何在Spring MVC Test中避免”Circular view path” 异常
  • 原文地址:https://www.cnblogs.com/jsoo/p/3243577.html
Copyright © 2011-2022 走看看