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
相关推荐
TheITSea1 分钟前
Java中的Optional:从入门到精通
java·开发语言
糕......7 分钟前
Java异常处理完全指南:从概念到自定义异常
java·开发语言·网络·学习
御水流红叶7 分钟前
第七届金盾杯(第一次比赛)wp
开发语言·python
Lhan.zzZ7 分钟前
Qt跨线程网络通信:QSocketNotifier警告及解决
开发语言·c++·qt
superman超哥8 分钟前
仓颉性能优化秘籍:内联函数的优化策略与深度实践
开发语言·后端·性能优化·内联函数·仓颉编程语言·仓颉·仓颉语言
Wang's Blog10 分钟前
Lua: 元表机制实现运算符重载与自定义数据类型
开发语言·lua
我找到地球的支点啦11 分钟前
Matlab系列(006) 一利用matlab保存txt文件和读取txt文件
开发语言·算法·matlab
-森屿安年-16 分钟前
STL中 Map 和 Set 的模拟实现
开发语言·c++
阿蒙Amon16 分钟前
C#每日面试题-接口和抽象类的区别
开发语言·c#
bybitq18 分钟前
Go 语言之旅方法(Methods)与接口(Interfaces)完全指南
开发语言·golang·xcode