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

  • 相关阅读:
    [读书笔记]子查询
    [读书笔记]SQL约束
    [转载]NoSQL数据库的基础知识
    利用C#实现对excel的写操作
    [转载]SQL Server内核架构剖析
    利用花生壳和IIS发布网页过程
    [读书笔记]ASP.NET的URL路由引擎
    [翻译]比较ADO.NET中的不同数据访问技术(Performance Comparison:Data Access Techniques)
    [正则表达式]基础知识总结
    CF623E Transforming Sequence
  • 原文地址:https://www.cnblogs.com/sea-breeze/p/7001204.html
Copyright © 2011-2022 走看看