首页 > 其他分享 >偷梁换柱

偷梁换柱

时间:2023-06-02 09:36:16浏览次数:31  
标签:150 age person 偷梁换柱 true newValue 属性

习题链接

偷梁换柱

偷梁换柱

现在有一个person对象,里面存储了一个人年龄age属性
要求在对age进行录入的时候,值在0-150之间正常赋值
若值小于0   就赋 0
若值大于150 就赋 150

关键点

  1. Object.defineProperties(目标对象,{在这里操作该对象的属性}) 操作多个属性的
    1. 目标对象是一个object对象即可
    2. {在这里操作该对象的属性}要对目标对象的属性进行描述
    3. 这个时候知道你听的很懵 只需要记得在这个{}括号里面是要操作对象里面的属性的
    4. 一个属性里面四个描述符号 最下方会告诉语法结构如何编写
      1. value:0, // =>值
      2. configurable:true, // =>默认值true,是否可以被删除再重新定义,若值为false,这个属性就无法被删除
      3. enumerable:true, // =>默认值true,在for in中是否可以遍历
      4. writable:true // =>默认值true,是否可以被修改,若是在defineProperties,或defineProperty中定义的属性,需要写明这个描述writable:true
    5. 一个属性还有两个方法
      1. get访问属性随之触发该函数
      2. set设置属性值,随之触发,可以对设置的值进行一个拦截,这个题目就是在set中进行拦截,但切不可使用this.当前属性值,否则会爆栈,直接报错
  2. Object.defineProperty(目标对象,目标属性,{操作当前属性}) 操作单个属性的

代码实现 && 完整的代码

  1. 完整code
    // 请不要更改这个对象里面的内容
    let person = {
      age: 0,
    };
    // TODO:在这里写入具体的实现逻辑
    // 对 person 的 age 属性更新行为进行拦截
    // 如果输入的年龄在 0 - 150 之间,则认为是合法
    // 否则,如果小于 0,则返回 0;如果大于 150,则返回 150
    Object.defineProperties(person,{
      'age_':{
        value:0,            // =>值 
        writable:true       // =>是否可以被修改
      },
      'age':{
        get(){ 
          return this.age_;     // 访问的旧属性=>返回新属性值
        },
        set(newValue,oldValue){ // 给旧属性设置值=>给新属性设置值
          if(newValue < 0) this.age_ = 0;  
          else if(newValue >= 0 && newValue < 150) this.age_ = newValue; 
          else this.age_ = 150;   
        }
      }
    }) 
    module.exports = person; // 检测需要,请勿删除
    

标签:150,age,person,偷梁换柱,true,newValue,属性
From: https://www.cnblogs.com/DnmyCourage/p/17450862.html

相关文章