js的属性提示符与存储器属性

news/2024/7/10 23:59:40 标签: javascript, es6

属性提示符

Property Descriptor 属性描述符
这也是直接 对象名.属性 方式给对象添加一个属性的底层方法

Object.getOwnPropertyDescriptor(对象,属性名) 或Object.getOwnPropertyDescriptors(对象)可以得到一个属性的描述符

javascript">        let obj = {
            name: "zyl",
            age: 20
        }
        console.log( Object.getOwnPropertyDescriptors(obj));

打印
在这里插入图片描述

configurable: true 该属性是否可以被修改
enumerable: true 该属性是否可以被枚举
value: “hc” 值
writable: true 该属性是否可以重新赋值

给对象添加属性(底层代码运行方式)
Object.defineProperty(对象,属性名,描述符) 添加单个属性
Object.defineProperties(对象,多个描述符)添加多个属性

javascript">        let obj = {
            name: "hc",
            age: 18
        }

        //等同于obj.password="123";
        Object.defineProperty(obj, "password", {
            configurable: true,
            enumerable: true,
            value: "123",
            writable: true
        });

        //一次性添加多个,也等同于
        //obj.password1="12345";
        //obj.password2="1234567";
        Object.defineProperties(obj, {
            password1: {
                configurable: true,
                enumerable: true,
                value: "12345",
                writable: true
            },
            password2: {
                configurable: true,
                enumerable: true,
                value: "1234567",
                writable: true
            }
        })
        console.log(Object.getOwnPropertyDescriptors(obj));

在这里插入图片描述

存储器属性

当给对象中的属性添加了get()或set()方法时则该属性不再是一个普通属性,而是变成了存储器属性。

如果一个属性是一个存储器属性的时候:

  1. 读取该属性的时候 会运行get方法
  2. 修改/赋值该属性的时候 会运行set方法
javascript">        let obj = {
        }
        Object.defineProperty(obj,"a",{
            get(){
                console.log("执行get方法");
            },
            set(){
                console.log("执行set方法")
            }
        })

在这里插入图片描述

存储器最大的意义在于 控制属性的读取和赋值。可以用于规范属性的值(如:验证账号密码是否正确等)

如下代码通过存储器将密码判断封装使用

javascript"><!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    密码:<input type="text" id="entry">
    <button id="login">登录</button>
    <span id="response"></span>
</body>
<script>
    let login = document.getElementById("login");
    let response = document.getElementById("response");
    let entry = document.getElementById("entry");
    let user = verification();
    login.onclick = () => {
        user.psd = entry.value;
        user.psd;
    }

    //封装登录验证
    function verification() {
        let user = {
            count: 0,//登录失败次数
        };
        // console.log(user.psd=1);
        Object.defineProperties(user, {
            psd: {
                get() {
                    return response.innerHTML = user.result;
                },
                set(val) {
                    if (val == 123456) {
                        user.result = "登录成功";
                    } else {
                        user.result = "登录失败";
                        this.count++;
                    }
                    if (this.count >= 3) {
                        user.result = "累计错误三次。请明天再来";
                    }
                }
            }
        })
        return user;
    }
</script>

</html>

http://www.niftyadmin.cn/n/1570174.html

相关文章

用eviews建立sarima模型_【十分钟计量经济学】Eviews估计方法总结

最小二乘法&#xff08;1&#xff09;普通最小二乘估计&#xff08;OLS&#xff09;&#xff1a;这是使用的最为普遍的模型&#xff0c;基本原理就是估计残差平方和最小化&#xff0c;不予赘述。&#xff08;2&#xff09;加权最小二乘估计&#xff08;WLS&#xff09; Eviews路…

js的Set和Map集合

Set 作用&#xff1a;用于存放不重复的数据 创建&#xff1a; let set1 new Set(); //创建一个没有任何内容的set集合let set2 new Set("LOLFPXIGRNGSN");//具有初始化数值的set集合可以看到打印出来的结果没有重复的字母 属性&#xff08;由于属性有很多&…

qq机器人源码_手把手教你搭建自己的小程序机器人客服

今天给大家讲一讲微信的新功能&#xff0c;微信对话开放平台的小程序对接及使用拓展方法&#xff01;相当于有了一个手机版某爱同学了&#xff0c;功能真的不可谓不强大&#xff01;还自带游戏功能&#xff0c;之后甚至可以根据游戏最后得分获得某奖励&#xff0c;无限YY中~PS&…

vue基础和它的基础指令

vue基础使用 创建方法 其中的el 类型 是一个字符串全称 element&#xff08;元素&#xff09;作用 配置控制的元素—表示vue要控制的区域&#xff0c;值为CSS选择器 其中的data 类型 对象作用 存放要用到的数据&#xff0c;数据为响应式的。 let vm new Vue({el:"#s…

Java中的action函数干什么的_细数Java技术架构这些年的发展史

前言Java一度被称为是应用最广泛的编程语言。尤其在Java web方面&#xff0c;Java作为后台服务器开发语言&#xff0c;尤其是它跨平台一次编译随处运行的特性&#xff0c;更是受到不少企业和工程师们的爱戴。作为应用开发的主要语言&#xff0c;Java也需要借助其他很多优秀的框…

vue——v-on指令的常用修饰符

stop 作用&#xff1a; 阻止事件冒泡 下述代码如果按照事件冒泡原理&#xff0c;在点击button后&#xff0c;会在控制台打印出father、son两个字符串&#xff0c;倘若加上stop。点击button按钮&#xff0c;则只会打印son。 <body><div id"father" click&…

python导入excel表格给列命名_python 对 excel sheet 的插入、复制、删除、重命名、设置标签颜色操作...

原博文 2020-02-27 22:20 − 0、import import openpyxl from openpyxl.styles import colors 1、插入 sheet wb openpyxl.Workbook() wb.sheetnames wb.create_sheet(titlemy_s...0609 相关推荐 2019-12-07 22:30 − DATA lv_filename TYPE string. TYPES:BEGIN OF ty_excel,…

Vue——v-bind指令

给标签动态绑定一个属性 作用: 动态的去绑定一个或者多个特性&#xff08;属性&#xff09; <body><img id"sel" v-bind:src"src"></img><!-- 可以省略v-bind --><!-- <img id"sel" :src"src"><…