zoukankan      html  css  js  c++  java
  • ES5之defineProperty

    一 概述

    Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。

    对象里目前存在的属性描述符有两种主要形式:数据描述符和存取描述符。

    如果一个描述符不具有value,writable,get 和 set 任意一个关键字,那么它将被认为是一个数据描述符。

    如果一个描述符同时有(value或writable)和(get或set)关键字,将会产生一个异常。

    当描述符中省略某些字段时,这些字段将使用它们的默认值。拥有布尔值的字段的默认值都是falsevaluegetset字段的默认值为undefined

    configurable特性表示对象的属性是否可以被删除,以及除writable特性外的其他特性是否可以被修改。

    enumerable定义了对象的属性是否可以在 for...in 循环和 Object.keys() 中被枚举。

    二 直接给对象的属性赋值

    var game = {
        name : 'Ace Combat'
    };
    game.developer = 'NAMCO';
    console.log(Object.getOwnPropertyDescriptor(game,'developer'));

    三 使用defineProperty定义属性

    function Saint(){
        var skill;
        Object.defineProperty(this,'name',{
            configurable: true,
            enumerable:true,
            value :null,
            writable:true
        });
        Object.defineProperty(this,'skill',{
            configurable:true,
            enumerable:true,
            get : function(){
                return skill;
            },
            set : function(_skill){
                skill = _skill;
            }
        })
    }
    
    var silver = new Saint();
    silver.name = 'Orpheus';
    console.log(silver);
    
    var gold = new Saint();
    gold.name = 'Aioria';
    gold.skill = 'Lightning Bolt';
    console.log(gold);
                

    Chrome控制台

    点击(...),调用getter方法 ( Invoke property getter),查看属性值

  • 相关阅读:
    elasticsearch
    超人学院课课程体系
    51cto大数据培训路线
    关于举办大数据处理技术培训的通知
    “大数据分析高级工程师”培训
    成都大数据Hadoop与Spark技术培训班
    大数据时代新闻采编人员职业能力培训
    EXCEL常用函数
    大数据实时处理-基于Spark的大数据实时处理及应用技术培训
    Properties vs. Attributes
  • 原文地址:https://www.cnblogs.com/sea-breeze/p/7001204.html
Copyright © 2011-2022 走看看