当前位置: 首页 > article >正文

javaScript蓝桥杯----偷梁换柱

目录

  • 一、介绍
  • 二、目标
  • 三、代码
  • 四、知识点
    • 1. Object.defineProperty
  • 五、答案


一、介绍

随着医疗水平的进步,人的平均寿命在慢慢提升。现在全球平均预期寿命是 73.2 岁,而在 1950 年则只有 47 岁。那么人类的寿命有极限吗?根据最新的研究,人类寿命或超过 120 岁,达到 150 岁。

因此,有关年龄的应用普遍将当今人类的合理年龄范围设置在 0 - 150 岁之间。那么,当一个年龄被录入,我们又是如何判断其是否合理的呢?

二、目标

在文件 age.js 中,有一个 person 对象,当它的 age 属性值改变时需要对新值做判断,将其永远控制在 0 - 150 之间。具体需求如下
在这里插入图片描述

  • 如果新属性值在 0 -150 之间(包含 0 和 150),则直接更新。
  • 如果新属性值小于 0,则属性值更新为 0。
  • 如果新属性值大于 150,则属性值更新为 150。

三、代码

html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>合理设置人的年龄</title>
  </head>
  <style>
    body {
      padding: 100px;
    }
    .input-container{
      margin-bottom: 15px;
    }
    .input-container,.output-container{
      width: 500px;
      margin:0 auto;
    }
    .text{
      width: 30%;
      text-align: right;
      display: inline-block;
    }
  </style>
  <body>
    <div class="input-container">
      <span class="text">请输出具体的年龄:</span>
      <input type="number" id="input">
    </div>
    <div class="output-container">  
      <span class="text">实际输出:</span>
      <span id="output"><span>
    </div>
    <script>
      module={}
    </script>
    <script type="text/javascript" src="./age.js"></script>
    <script>
      const p=module.exports;
      const input=document.getElementById("input");
      const output=document.getElementById("output");
      
      input.addEventListener("input",(e)=>{
        p.age=e.target.value;
        output.innerText=p.age;
      })
    </script>
  </body>
</html>

js

// 请不要更改这个对象里面的内容
let person = {
  age: 0,
};
// TODO:在这里写入具体的实现逻辑
// 对 person 的 age 属性更新行为进行拦截
// 如果输入的年龄在 0 - 150 之间,则认为是合法
// 否则,如果小于 0,则返回 0;如果大于 150,则返回 150

module.exports = person; // 检测需要,请勿删除

四、知识点

1. Object.defineProperty

参数
对象 属性 对象内容
属性

  1. configurable(颜色会发生改变,可否删除)
    当且仅当该属性的 configurable 键值为 true 时,该属性的描述符才能够被改变,同时该属性也能从对应的对象上被删除。
    默认为 false。
  2. enumerable(可否遍历)
    当且仅当该属性的 enumerable 键值为 true 时,该属性才会出现在对象的枚举属性中。
    默认为 false。
    数据描述符还具有以下可选键值:
  3. value(值)
    该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。
    默认为 undefined。
  4. writable(值可否被改变)
    当且仅当该属性的 writable 键值为 true 时,属性的值,也就是上面的 value,才能被赋值运算符 (en-US)改变。
    默认为 false。
  5. get
    属性的 getter 函数,如果没有 getter,则为 undefined。当访问该属性时,会调用此函数。执行时不传入任何参数,但是会传入 this 对象(由于继承关系,这里的this并不一定是定义该属性的对象)。该函数的返回值会被用作属性的值。
    默认为 undefined。
  6. set
    属性的 setter 函数,如果没有 setter,则为 undefined。当属性值被修改时,会调用此函数。该方法接受一个参数(也就是被赋予的新值),会传入赋值时的 this 对象。
    默认为 undefined。

五、答案

// 请不要更改这个对象里面的内容
let person = {
  age: 0,
};
// TODO:在这里写入具体的实现逻辑
// 对 person 的 age 属性更新行为进行拦截
// 如果输入的年龄在 0 - 150 之间,则认为是合法
// 否则,如果小于 0,则返回 0;如果大于 150,则返回 150
let val = 0
Object.defineProperty(person, 'age', {
  get() {
    return val
  },
  set(newval) {
    val = newval
    if (val > 150) {
      return val = 150
    } else if (val < 0) {
      return val = 0
    } else {
      return val = newval
    }
  }
})
module.exports = person; // 检测需要,请勿删除


http://www.kler.cn/a/6416.html

相关文章:

  • GitCode 光引计划投稿|MilvusPlus:开启向量数据库新篇章
  • OpenHarmony的分布式服务框架介绍与实现解析
  • SAP抓取外部https报错SSL handshake处理方法
  • Ajax中的axios
  • 【JAVA】JAVA接口公共返回体ResponseData封装
  • 服务器数据恢复—V7000存储中多块磁盘出现故障导致业务中断的数据恢复案例
  • 什么是语法糖?c语言中有哪些
  • Android布局层级过深为什么会对性能有影响?为什么Compose没有布局嵌套问题?
  • 基于Springboot和MybatisPlus的外卖项目 瑞吉外卖Day4
  • 浅谈ChatGPT取代前端开发工程师
  • linux命令-netstat
  • 【C语言学习】循环结构和选择结构
  • 【Android】之【自定义View实践】
  • Android 开发 错误 Execution failed for task ‘:app:processDebugMainManifest‘.
  • 【Python实战】Python对中国500强排行榜数据进行可视化分析
  • Qt音视频开发33-不同库版本不同位数的库和头文件的引用
  • 【Ruby学习笔记】7.Ruby 循环及方法
  • 五分钟带你了解 计算机操作系统——内存管理(万字详解·图文)
  • 已经提了离职,还有一周就走,公司突然把我移出企业微信,没法考勤打卡, 还要继续上班吗?...
  • 自定义 Jackson 的 ObjectMapper, springboot多个模块共同引用,爽
  • 章节3 多姿多彩的Python数据可视化
  • 后端开发选择RUST,有被爽到
  • RCIE练习题1之IPSec 配置
  • C++继承
  • 牛客SQL练习篇题解
  • Python tkinter 制作文章搜索软件