博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Object.defineProperty使用小记
阅读量:5826 次
发布时间:2019-06-18

本文共 648 字,大约阅读时间需要 2 分钟。

本来想实现下vue的源码,结果刚开始就踩了个坑,记录下。

let obj = {  name: 'Han'}Object.defineProperty(obj, 'name', {  get() {    return obj.name  }})复制代码

控制台打了下报错说是栈溢出。
原因是直接返回obj.name,相当于又调用了一次get方法,然后继续返回obj.name继续调用get方法...

解决方法

  1. 数据代理。
let obj = {  _name: 'Han'}Object.defineProperty(obj, 'name', {  get() {    return obj._name  },  set(newVal) {    obj._name = newVal  }})复制代码
  1. 包多一层函数,把需要修改(输出)的变量以函数内私有变量的形式存储。
let obj = {  name: 'Han'} function reactive(obj, key, val) {  Object.defineProperty(obj, key, {    get() {      return val    },    set(newVal) {      val = newVal    }  })}reactive(obj, 'name', obj.name)复制代码

转载于:https://juejin.im/post/5c4d25a3e51d4502fd759e68

你可能感兴趣的文章
linux 启动oracle
查看>>
《写给大忙人看的java se 8》笔记
查看>>
倒计时:计算时间差
查看>>
Linux/windows P2V VMWare ESXi
查看>>
Windows XP倒计时到底意味着什么?
查看>>
tomcat一步步实现反向代理、负载均衡、内存复制
查看>>
运维工程师在干什么学些什么?【致菜鸟】
查看>>
Linux中iptables详解
查看>>
java中回调函数以及关于包装类的Demo
查看>>
maven异常:missing artifact jdk.tools:jar:1.6
查看>>
终端安全求生指南(五)-——日志管理
查看>>
Nginx 使用 openssl 的自签名证书
查看>>
创业维艰、守成不易
查看>>
PHP环境安装套件:快速安装LAMP环境
查看>>
CSS3
查看>>
ul下的li浮动,如何是ul有li的高度
查看>>
C++ primer plus
查看>>
python mysqlDB
查看>>
UVALive 3942 Remember the Word Tire+DP
查看>>
从微软的DBML文件中我们能学到什么(它告诉了我们什么是微软的重中之重)~目录...
查看>>