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
相关推荐
吴声子夜歌几秒前
Nginx应用与运维——Nginx Web服务应用实战(伪流媒体服务器的搭建)
运维·前端·nginx
ysu_03143 分钟前
uv实战指南-从Python版本虚拟环境到pyproject依赖管理
开发语言·python·pip·uv·虚拟环境·包管理·依赖管理
铅笔小新z20 分钟前
【stm32】理解弱引用
javascript·stm32·嵌入式硬件
ss27325 分钟前
AI全栈实战 | 2.4-01 Node 与前端工程化:前端为什么离不开 Node,它不只是构建工具的宿主
前端
aixingpan26 分钟前
aixingpan.cn API开发文档:api_docs_transit接口指南
前端·php
鬓戈29 分钟前
Volta:解决 nvm「不能同时存在多个 Node 版本」的痛点
前端
東隅已逝,桑榆非晚30 分钟前
c++模板进阶
开发语言·c++·笔记·学习
吴声子夜歌33 分钟前
Nginx应用与运维——Nginx Web服务应用实战(HTTP增强协议服务器的搭建)
运维·前端·nginx
凤城老人40 分钟前
从PyQt6到Electron:一款英语字帖生成器的跨平台重构实战与踩坑全记录
javascript·重构·electron
Cc.Y5 小时前
Java零基础入门:字符串深度掌握——从基础API到StringBuilder性能优化
java·开发语言·性能优化