zoukankan      html  css  js  c++  java
  • 面向对象精要-理解对象

    1、创建对象

    创建对象的两种方法:

    使用Object构造函数

    var person2 = new Object();
    person2.name="Qian";

    使用对象的字面形式

    var person1={
        name:"Qian"
    };

    对象添加以及修改时JavaScript会在对象上调用[[Put]][[Set]]方法

    2、属性探测

    2.1、使用“in”操作符

    console.log("name" in person1)/*true*/

    2.2、使用“hasOwnProperty()”方法

    console.log(person1.hasOwnProperty("name"))/*true*/

    3、删除属性

    var person1={
        name:"Qian"
    };
    delete person1.name;
    console.log(person1.hasOwnProperty("name"))/*false*/

     4、枚举属性

     for-in:可枚举属性的内部特征都被设置为true,for-in循环会枚举一个对象所有的可没经验属性并将属性名赋给一个变量

    var person1 = {
        name:"Qian",
        age:12
    }
    for(var item in person1){
        console.log(item)/*name    age*/
    }

    Object.keys():获取一个对象的属性列表已备程序使用

    var person1 = {
        name:"Qian",
        age:12
    };
    var properties = Object.keys(person1);
    for(var i=0;i<properties.length;i++){
        console.log(i)
    }

    5、属性类型

    数据属性:包含一个

    访问器属性:包含一个函数

    6、属性特征

    通用特征:

    是否可遍历:[[Enumerable]]

    是否可配置:[[Configurable]]---------->可以用delete删除

    修改属性特征:Object.defineProperty()方法

    例:修改某个对象属性使其变成不可以枚举且不可配置

    Object.defineProperty(person1,"name",{
        enumerable:false,
        configurable:false
    });
    console.log(person1.propertyIsEnumerable("name"))/*false*/

    数据属性特征:

    [[Value]]:创建对象时该特征自动赋值

    [[Writable]]:布尔值,默认可以写

    定义完整的数据属性:Object.defineProperty()

    var person1 = {}
    Object.defineProperty(person1,"name",{
        value:"Qian",
        enumerable:true,
        configurable:true,
        writable:true
    })

    访问器属性特征:

    [[Get]]

    [[Set]]

    定义多重属性

    Object.defieProperties()方法

    var person1 = {}
    Object.defineProperties(person1, {
        _name:{
            value: "Qian",
            enumerable: true,
            configurable: true,
            writable: true
        },
        name:{
            get:function () {
                console.log("Reading me")
            }
        }
    })

    获取属性特征:

    Object.getOwnPropertyDescriptor()方法

    var person1 = {
        name:"Qian"
    }
    var deseciptor = Object.getOwnPropertyDescriptor(person1,"name");
    console.log(deseciptor.enumerable)/*true*/

    7、禁止修改对象

    [[Extensible]]:布尔值,设置为false,禁止新属性的添加

    7.1、禁止扩展

    方法:使用Object.preventExtensions()

    检测方法:使用Object.isExtensible()

    var person1 = {
        name:"Qian"
    }
    Object.preventExtensions(person1);
    console.log(Object.isExtensible(person1))/*false*/

    7.2、封印对象

    方法:Object.seal()

    检测方法:使用Object.isSealed()

    var person1 = {
        name:"Qian"
    };
    Object.seal(person1);
    console.log(Object.isSealed(person1))/*true*/

    7.3、冻结对象

    方法:Object.freeze()

    检测方法:Object.isFrozen()

    var person1 = {
        name:"Qian"
    };
    Object.freeze(person1);
    console.log(Object.isFrozen(person1))/*true*/

    总结:

    1、将属性视为键值对,对象视为属性的哈希表有助于理解JavaScript对象。

    2、你可以用点好或者中括号访问对象的属性

    3、用in操作符检测某个属性是否存在

    4、属性的两种类型:数据属性和访问器属性

    5、属性的特征

    6、锁定对象的3中方式

  • 相关阅读:
    二项队列
    左式堆
    优先级队列
    web.xml配置文件中<async-supported>true</async-supported>报错的解决方案
    Struts2中关于"There is no Action mapped for namespace / and action name"的总结
    spring四种依赖注入方式
    Spring @Resource、@Autowired、@Qualifier的注解注入及区别
    CXF自动生成客户端
    maven update 以后报错。
    Mavne + Spring整合CXF
  • 原文地址:https://www.cnblogs.com/QianBoy/p/8859036.html
Copyright © 2011-2022 走看看