当前位置: 首页 > 编程笔记 >

JavaScript 描述符和命名属性

厍胤运
2023-03-14
本文向大家介绍JavaScript 描述符和命名属性,包括了JavaScript 描述符和命名属性的使用技巧和注意事项,需要的朋友参考一下

示例

属性是对象的成员。每个命名属性都是一对(名称,描述符)。该名称是允许访问的字符串(使用点符号object.propertyName或方括号符号object['propertyName'])。描述符是对字段的记录,这些字段定义了访问属性时的行为(属性发生了什么以及访问该属性返回的值是什么)。总的来说,属性将名称与行为相关联(我们可以将行为视为黑盒)。

命名属性有两种类型:

  1. 数据属性:属性的名称与一个值相关联。

  2. accessor属性:该属性的名称与一个或两个访问器函数关联。

示范:

obj.propertyName1 = 5; //在幕后翻译成
                       //如果它是数据属性,则将5赋给value字段*
                //或使用accessor属性使用参数5调用set函数


//*实际上是在数据属性的情况下是否会发生分配
//还取决于可写字段的存在和值-稍后

属性的类型由其描述符的字段确定,并且属性不能同时属于这两种类型。

数据描述符-

  • 必填字段:value或writable或两者

  • 可选字段:configurable,enumerable

样品:

{
   value: 10,
   writable: true;
}

访问器描述符-

  • 必填字段:get或set或两者

  • 可选字段:configurable,enumerable

样品:

{
    get: function () {
        return 10;
    },
    enumerable: true
}

字段的含义及其默认值

configurable,enumerable以及writable:

  • 这些键均默认为false。

  • configurable是true当且仅当该属性描述符的类型可以改变,并且如果该属性可以由相应的对象被删除。

  • enumerable是true当且仅当该属性对应的对象的属性的枚举期间显示出来。

  • writable是true当且仅当与所述属性相关联的值可以与一个赋值操作符改变。

get和set:

  • 这些键默认为undefined。

  • get是用作属性的吸气剂的函数,或者undefined如果没有吸气剂的函数。函数返回值将用作属性的值。

  • set是用作属性的setter的函数,或者undefined如果没有setter的函数。该函数将仅将分配给属性的新值作为参数。

value:

  • 此项默认为undefined。

  • 与属性关联的值。可以是任何有效的JavaScript值(数字,对象,函数等)。

例:

    var obj = {propertyName1: 1}; //该对实际上是('propertyName1',{value:1,
                                                                    // 可写:true,
                                                                    // 枚举:true,
                                                                    // configurable:true})
    Object.defineProperty(obj, 'propertyName2', {get: function() {
                                                    console.log('this will be logged ' + 
                                 'every time propertyName2 is accessed to get its value');
                                                },
                                            set: function() {
                                                    console.log('and this will be logged ' + 
                                'every time propertyName2\'s value is tried to be set')
                      //将被视为具有枚举:假,可配置:假
                                                }});
//propertyName1是obj的数据属性的名称 
//propertyName2是其访问者属性的名称





obj.propertyName1 = 3;
console.log(obj.propertyName1); //3

obj.propertyName2 = 3; //并且每次尝试设置propertyName2的值时都会记录
console.log(obj.propertyName2); //每次访问propertyName2以获取其值时,将记录此事件
           

 类似资料:
  • 我们知道,对象可以存储属性。 到目前为止,属性对我们来说只是一个简单的“键值”对。但对象属性实际上是更灵活且更强大的东西。 在本章中,我们将学习其他配置选项,在下一章中,我们将学习如何将它们无形地转换为 getter/setter 函数。 属性标志 对象属性(properties),除 value 外,还有三个特殊的特性(attributes),也就是所谓的“标志”: writable — 如果为

  • 概述 JavaScript 提供了一个内部数据结构,用来描述对象的属性,控制它的行为,比如该属性是否可写、可遍历等等。这个内部数据结构称为“属性描述对象”(attributes object)。每个属性都有自己对应的属性描述对象,保存该属性的一些元信息。 下面是属性描述对象的一个例子。 { value: 123, writable: false, enumerable: true,

  • Python 中,通过使用描述符,可以让程序员在引用一个对象属性时自定义要完成的工作。 本质上看,描述符就是一个类,只不过它定义了另一个类中属性的访问方式。换句话说,一个类可以将属性管理全权委托给描述符类。 描述符是 Python 中复杂属性访问的基础,它在内部被用于实现 property、方法、类方法、静态方法和 super 类型。 描述符类基于以下 3 个特殊方法,换句话说,这 3 个方法组成

  • 问题内容: 很抱歉没有自己进行研究并在此处提出要求。我时间很短。 是否可能有两个文件描述符表,用于从单个线程产生的两个或更多线程。两个或多个子线程正在同时访问同一文件,那么同一文件在不同线程中针对同一文件的两次不同打开的偏移量是特定于线程的吗? 谢谢 问题答案: 文件描述符在线程之间共享。如果要“特定于线程”的偏移量,为什么不让每个线程使用不同的文件描述符(多次)?

  • 请帮助根据顶部数字/分数排序字符串(顺便说一句,根据我们的教练,我们不能使用arrays.sort) } 示例输入是这样的 我想要的输出是这样的 但是发生的是: 请帮忙,我想要一个简单的解释。非常感谢。

  • 问题内容: 描述符对象需要存在于类中,而不是存在于实例中 因为那是实现的方式。 一个简单的例子。考虑一个描述符: 考虑每个obj具有多个Prop的情况:我将需要使用唯一的名称来标识值和乘数(如此处。具有每个实例的描述符对象将允许将(和)存储在描述符本身中,从而简化了几样东西。 我知道以前也曾提出过类似的问题,但我没有找到真正的解释: 为什么以这种方式设计Python? 建议使用哪种方式存储描述符需