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),查看属性值

  • 相关阅读:
    跃迁方法论 Continuous practice
    EPI online zoom session 面试算法基础知识直播分享
    台州 OJ 2648 小希的迷宫
    洛谷 P1074 靶形数独
    洛谷 P1433 DP 状态压缩
    台州 OJ FatMouse and Cheese 深搜 记忆化搜索
    台州 OJ 2676 Tree of Tree 树状 DP
    台州 OJ 2537 Charlie's Change 多重背包 二进制优化 路径记录
    台州 OJ 2378 Tug of War
    台州 OJ 2850 Key Task BFS
  • 原文地址:https://www.cnblogs.com/sea-breeze/p/7001204.html
Copyright © 2011-2022 走看看