ES3的对象代理写法:

  1. console.log('定义私有变量ES3写法:')
  2. // ES3
  3. var Person = function (){
  4. var data = {
  5. name:'ES3',
  6. age:14,
  7. sex:'nv'
  8. }
  9. // 读API
  10. this.get = function(key){
  11. return data[key]
  12. }
  13. // 写API
  14. this.set = function(key,value){
  15. if(key !== 'sex'){
  16. data[key] = value
  17. }
  18. }
  19. }
  20. // 声明一个实例
  21. var person = new Person();
  22. // 读取
    console.table({name:person.get('name'),age:person.get('age'),sex:person.get('sex')});
  23. // 修改
  24. person.set('name','c-ES3') // 修改name为c-ES3
  25. console.table({name:person.get('name'),age:person.get('age'),sex:person.get('sex')});
  26. person.set('sex','nan') // 修改sex为nan 修改失败,因为被设置了保护
  27. console.table({name:person.get('name'),age:person.get('age'),sex:person.get('sex')});

ES5的对象代理写法:

  1. console.log('定义私有变量ES5写法:')
  2. // ES5
  3. var Person = {
  4. name:'ES5',
  5. age:14
  6. }
  7. // 设置保护,不可被写
  8. Object.defineProperty(Person,'sex',{
  9. writable:false,
  10. value:'nv'
  11. })
  12. // 读取
  13. console.table({
  14. name:Person.name,
  15. age:Person.age,
  16. sex:Person.sex
  17. })
  18. // 修改
  19. Person.name = 'c-ES5' // 修改name为c-ES5
  20. console.table({
  21. name:Person.name,
  22. age:Person.age,
  23. sex:Person.sex
  24. })
  25. Person.sex = 'nan' // 修改sex为nan 修改失败,因为被设置了保护
  26. console.table({
  27. name:Person.name,
  28. age:Person.age,
  29. sex:Person.sex
  30. })

ES6的对象代理写法:

  1. console.log('定义私有变量ES6写法:')
  2. let Person1 = {
  3. name:'ES6',
  4. age:14,
  5. sex:'nv'
  6. }
  7. // 设置对象代理
  8. let person1 = new Proxy(Person1,{
  9. // 读
  10. get(target,key){
  11. return target[key]
  12. },
  13. // 写
  14. set(target,key,value){
  15. if(key !== 'sex'){
  16. target[key] = value
  17. }
  18. }
  19. });
  20. // 读取
  21. console.table({
  22. name:person1.name,
  23. age:person1.age,
  24. sex:person1.sex
  25. })
  26. // 修改name为c-ES6
  27. person1.name = 'c-ES6'
  28. console.table({
  29. name:person1.name,
  30. age:person1.age,
  31. sex:person1.sex
  32. })
  33. // 修改sex为nan 修改失败,因为被设置了保护
  34. person1.sex = 'nan'
  35. console.table({
  36. name:person1.name,
  37. age:person1.age,
  38. sex:person1.sex
  39. })

ES3、ES5、ES6对象代理的写法差异的更多相关文章

  1. ES5和ES6对象导出和导入(转载,待整理)

    1.import ... form...替代 require() //不接收对象 require:require('s.css'); //(es5) improt 's.css' //(es6) // ...

  2. React Native 的ES5 ES6写法对照表

    模块 引用 在ES5里,如果使用CommonJS标准,引入React包基本通过require进行,代码类似这样: //ES5 var React = require("react" ...

  3. React/React Native 的ES5 ES6写法对照表

    //es6与es5的区别很多React/React Native的初学者都被ES6的问题迷惑:各路大神都建议我们直接学习ES6的语法(class Foo extends React.Component ...

  4. React/React Native 的ES5 ES6写法对照表-b

    很多React/React Native的初学者都被ES6的问题迷惑:各路大神都建议我们直接学习ES6的语法(class Foo extends React.Component),然而网上搜到的很多教 ...

  5. 【转】React Native中ES5 ES6写法对照

    很多React Native的初学者都被ES6的问题迷惑:各路大神都建议我们直接学习ES6的语法(class Foo extends React.Component),然而网上搜到的很多教程和例子都是 ...

  6. React Native之ES5/ES6语法差异对照表

    很多React/React Native的初学者都被ES6的问题迷惑:各路大神都建议我们直接学习ES6的语法(class Foo extends React.Component),然而网上搜到的很多教 ...

  7. es6对象内函数的两种写法

    es6对象内函数一般有两种写法: var person1 = { name: "p1", sayThis() { console.log(this); } }; var perso ...

  8. React/React Native的 ES5 ES6 写法对照

      ES5 ES6 模块 var React = require("react-native); var { Image, Text, View } = React;   import Re ...

  9. 简述ES5 ES6

    很久前的某一天,一位大神问我,你知道ES6相对于ES5有什么改进吗? 我一脸懵逼的反问,那个啥,啥是ES5.ES6啊. 不得不承认与大神之间的差距,回来深思了这个问题,结合以前的知识,算是有了点眉目. ...

随机推荐

  1. ORACLE关于日志文件基本操作

    1.查询系统使用的是哪一组日志文件:SELECT * FROM V$LOG; 2.查询正在使用的组所对应的日志文件:SELECT * FROM V$LOGFILE; 3.强制日志切换:ALTER SY ...

  2. 【5】Android Service 与 AIDL

    前言:本系列仅介绍基本大体的使用步骤,而不对每个步骤进行细致的讲解.读者可作为已经对相关内容有所了解后的快速查阅. 一.单应用内Service的使用 Service组件与Activity以IBinde ...

  3. 基于阿里云平台的使用python脚本发送短信

    第一步:点击短信服务下的帮助文档 第二步:安装python的SDK:点击安装python sdk 第三步:直接通过python的pip工具安装即可,方便快捷: 第四步:点击红框进行测试: 第五步:测试 ...

  4. 剑指Offer-28.数组中出现次数超过一半的数字(C++/Java)

    题目: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.如 ...

  5. JVM-Jinfo命令

    jinfo JVM Configuration info这个命令作用是实时查看和调整虚拟机运行参数. 之前的jps -v口令只能查看到显示指定的参数,如果想要查看未被显示指定的参数的值就要使用jinf ...

  6. js 的cookie问题

    获取时解码可以用decodeURIComponent(),代替 unescape() // 设置cookiefunction setCookie(name,value) { var Days = 30 ...

  7. 试着用workerman开发一个在线聊天应用

    聊天功能是很常见的一种功能,Workerman是一款开源高性能异步PHP socket即时通讯框架. 什么是Workerman? Workerman是一款 开源 高性能异步 PHP socket即时通 ...

  8. SqlServer ----- 拷贝数据表

    两种方式,第一种方式只是把表中的字段进行拷贝,第二种把表中的关联关系,主键自增长全部拷贝. 1.把表中的关联关系,主键自增长全部拷贝. 选择需要拷贝的表,点击编辑器窗口,会看到这个表的sql 语句,主 ...

  9. MySQL-8.0.x DDL 原子性

    [1.mysql-8.0.x 新特性之 DDL 原子性] 在没有 DDL 原子性之前 DBA 对 DDL 语句基本上是无能为力的,比如说 DDL 执行的过程中停电了,这下就只有天知道了.实现上最终的愿 ...

  10. PAT 1002 A+B for Polynomials(map模拟)

    This time, you are supposed to find A+B where A and B are two polynomials(多项式). Input Each input fil ...