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

  • 相关阅读:
    事务的隔离级别
    常用linux命令
    cpu.load avg和cpu使用率的区别
    【Leetcode】55. Jump Game
    【Leetcode】322. coin-change
    34.find-first-and-last-position-of-element-in-sorted-array
    【LeetCode】56.merge-intervals
    Leetcode】210.course-schedule-ii
    基于Thread实现自己的定时器Timer
    Boost--内存管理--(1)智能指针
  • 原文地址:https://www.cnblogs.com/sea-breeze/p/7001204.html
Copyright © 2011-2022 走看看