js进阶-获取闭包中的对象

一、题目

获取下面闭包中的对象obj,并对其修改

javascript 复制代码
const o = (function() {
    const obj = {
        name: "张三",
        age: 35,
    };
    return {
        get: function(k) {
            return obj[k];
        }
    }
})();

console.log(`name:${o.get("name")}, age:${o.get("age")}`);

二、原型链

  • 所有引用类型对象都有隐式原型__proto__;
  • 查找引用类型上的属性时,如果本身没有,就会去其__proto__上查找;
  • proto__本身也是一个对象,其上查不到,会继续查找它的__proto;
  • 所有引用类型的根__proto__都是Object.prototype;
  • 所有函数都有显示原型prototype;
  • 所有引用类型的__proto__等于其构造函数的pototype;
javascript 复制代码
const obj = {
    num: 22
};
console.log(obj.__proto__ === Object.prototype); // 输出为true

三、解题

  • 题中的闭包可以在obj中获取属性;
  • 如果能给其上增加一个属性,其值返回obj本身即可拿到obj对象;
  • 无法直接在obj上增加属性,那么可以在其原型__proto__上增加属性;
javascript 复制代码
const o = (function() {
    const obj = {
        name: "张三",
        age: 35,
    };
    return {
        get: function(k) {
            return obj[k];
        }
    }
})();

console.log(`name:${o.get("name")}, age:${o.get("age")}`); // name:张三, age:35

// 给原型增加属性
Object.defineProperty(Object.prototype, 'self', {
    get: function() {
        return this;
    }
});

// 获取obj
const obj = o.get("self");

// 修改其值
obj.age = 22;

console.log(`name:${o.get("name")}, age:${o.get("age")}`); // name:张三, age:22
相关推荐
福兮说13 小时前
设计稿是 #4A7C6F,页面量出来是 #4B7C6F:HEX、HSL、透明度、canvas 来回转的七个坑
前端·javascript·css·canvas
\光辉岁月/13 小时前
5.java-数组
java·开发语言
Java后端的Ai之路13 小时前
Python进阶探索29_eval内置函数
开发语言·python·探索·eval·内置函数
谢亮_vipxieliang13 小时前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
时间的拾荒人14 小时前
Qt 多线程详解:从 QThread 到实战
开发语言·qt·面试
郑州光合科技余经理14 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
2601_9620715714 小时前
类变量和全局变量的生命周期有什么区别?
java·开发语言·jvm
Wang's Blog14 小时前
Java 项目实战: 外卖平台优化-前后端分离开发模式与工程拆分
java·开发语言
小呆呆66614 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
凤城老人15 小时前
从 PyQt6 到 Electron:给 Edge TTS 做一个“多角色配音机“的踩坑手记
javascript·typescript·electron