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
相关推荐
Amos_Web1 分钟前
Rspack 源码解析 (1) —— 架构总览:从 Node.js 到 Rust 的跨界之旅
前端·rust·node.js
qq_406176141 分钟前
React 组件传参 & 路由跳转传参
前端·javascript·react.js
电商API&Tina2 分钟前
唯品会数据采集API接口||电商API数据采集
java·javascript·数据库·python·sql·json
AI+程序员在路上4 分钟前
新手进入嵌入式行业方法与方向选择
c语言·开发语言·单片机·嵌入式硬件
dovens4 分钟前
GO 快速升级Go版本
开发语言·redis·golang
Csvn6 分钟前
React 测试入门:Jest + Testing Library 完整指南
前端·react.js
悟空瞎说8 分钟前
Flutter面试九阳神功第六层:Platform Channels/三棵树/Key/动画,大白话+实操代码(2026版)
前端
芦芭荞9 分钟前
QT之TCP/IP通讯
开发语言·qt·tcp/ip
Oneslide11 分钟前
手写签名组件实现原理
前端
zero159712 分钟前
Python 8天极速入门笔记(大模型工程师专用):第三篇-列表与字典(Python核心数据结构,大模型必备)
开发语言·python·ai编程