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
相关推荐
打呵欠的猫2 分钟前
我把 20 个页面的权限控制从"硬编码"改成"配置驱动",AI 帮我生成了 80% 的迁移代码
前端·ai编程
志尊宝14 分钟前
Vue3 零基础每日笔记(005):ref 响应式基础——为什么 script 里要 .value
前端·javascript·vue.js·笔记
海鸥两三20 分钟前
Mac电脑使用 Tabby 部署前端项目到阿里云服务器完整教程
前端·macos·阿里云
xiancai_xianyu25 分钟前
想把数据模型一次建完美再上AI?会一直卡在建模里
开发语言·人工智能·php·数据模型·语义层·本体建模·企业知识网络
console.log('npc')27 分钟前
2026 实测:Grok 4.5 与 Grok 4.6 怎么选?前端开发、教程写作、Figma 还原选型指南
前端·大模型·ai编程·figma·grok
(Charon)39 分钟前
【C++】网络缓冲区设计(二):Ring Buffer环形缓冲区、head/tail与跨界读写
开发语言·c++
yyt36304584142 分钟前
一次鼠标交互触发两次 Vue flushJobs:把高频交互从 VDOM 里拆出来
前端·vue.js·计算机外设
YUJIANYUE1 小时前
查立得万用查分安卓版(web环境+查询系统免安装单文件一键运行包)
android·前端
Java后端的Ai之路1 小时前
LangChain Deep Agents 从入门到企业实战
开发语言·人工智能·python·langchain·deepagents
会飞的拖把1 小时前
Python文件操作详解:从文件读写到os、shutil模块实战
开发语言·python