ES3、ES5、ES6对象代理的写法差异
ES3的对象代理写法:
console.log('定义私有变量ES3写法:')
// ES3
var Person = function (){
var data = {
name:'ES3',
age:14,
sex:'nv'
}
// 读API
this.get = function(key){
return data[key]
}
// 写API
this.set = function(key,value){
if(key !== 'sex'){
data[key] = value
}
}
}
// 声明一个实例
var person = new Person();
// 读取
console.table({name:person.get('name'),age:person.get('age'),sex:person.get('sex')});
// 修改
person.set('name','c-ES3') // 修改name为c-ES3
console.table({name:person.get('name'),age:person.get('age'),sex:person.get('sex')});
person.set('sex','nan') // 修改sex为nan 修改失败,因为被设置了保护
console.table({name:person.get('name'),age:person.get('age'),sex:person.get('sex')});
ES5的对象代理写法:
console.log('定义私有变量ES5写法:')
// ES5
var Person = {
name:'ES5',
age:14
}
// 设置保护,不可被写
Object.defineProperty(Person,'sex',{
writable:false,
value:'nv'
})
// 读取
console.table({
name:Person.name,
age:Person.age,
sex:Person.sex
})
// 修改
Person.name = 'c-ES5' // 修改name为c-ES5
console.table({
name:Person.name,
age:Person.age,
sex:Person.sex
})
Person.sex = 'nan' // 修改sex为nan 修改失败,因为被设置了保护
console.table({
name:Person.name,
age:Person.age,
sex:Person.sex
})
ES6的对象代理写法:
console.log('定义私有变量ES6写法:')
let Person1 = {
name:'ES6',
age:14,
sex:'nv'
}
// 设置对象代理
let person1 = new Proxy(Person1,{
// 读
get(target,key){
return target[key]
},
// 写
set(target,key,value){
if(key !== 'sex'){
target[key] = value
}
}
});
// 读取
console.table({
name:person1.name,
age:person1.age,
sex:person1.sex
})
// 修改name为c-ES6
person1.name = 'c-ES6'
console.table({
name:person1.name,
age:person1.age,
sex:person1.sex
})
// 修改sex为nan 修改失败,因为被设置了保护
person1.sex = 'nan'
console.table({
name:person1.name,
age:person1.age,
sex:person1.sex
})
ES3、ES5、ES6对象代理的写法差异的更多相关文章
- ES5和ES6对象导出和导入(转载,待整理)
1.import ... form...替代 require() //不接收对象 require:require('s.css'); //(es5) improt 's.css' //(es6) // ...
- React Native 的ES5 ES6写法对照表
模块 引用 在ES5里,如果使用CommonJS标准,引入React包基本通过require进行,代码类似这样: //ES5 var React = require("react" ...
- React/React Native 的ES5 ES6写法对照表
//es6与es5的区别很多React/React Native的初学者都被ES6的问题迷惑:各路大神都建议我们直接学习ES6的语法(class Foo extends React.Component ...
- React/React Native 的ES5 ES6写法对照表-b
很多React/React Native的初学者都被ES6的问题迷惑:各路大神都建议我们直接学习ES6的语法(class Foo extends React.Component),然而网上搜到的很多教 ...
- 【转】React Native中ES5 ES6写法对照
很多React Native的初学者都被ES6的问题迷惑:各路大神都建议我们直接学习ES6的语法(class Foo extends React.Component),然而网上搜到的很多教程和例子都是 ...
- React Native之ES5/ES6语法差异对照表
很多React/React Native的初学者都被ES6的问题迷惑:各路大神都建议我们直接学习ES6的语法(class Foo extends React.Component),然而网上搜到的很多教 ...
- es6对象内函数的两种写法
es6对象内函数一般有两种写法: var person1 = { name: "p1", sayThis() { console.log(this); } }; var perso ...
- React/React Native的 ES5 ES6 写法对照
ES5 ES6 模块 var React = require("react-native); var { Image, Text, View } = React; import Re ...
- 简述ES5 ES6
很久前的某一天,一位大神问我,你知道ES6相对于ES5有什么改进吗? 我一脸懵逼的反问,那个啥,啥是ES5.ES6啊. 不得不承认与大神之间的差距,回来深思了这个问题,结合以前的知识,算是有了点眉目. ...
随机推荐
- 解决brew update很慢
一般遇到这种问题,就跟墙有关啦,需要更换源. 用清华的源就非常好,去清华镜像的官网看一下说明,https://mirrors.tuna.tsinghua.edu.cn/help/homebrew/ $ ...
- Error 1327 Invalid Drive 的解决办法
出现场景: 当我在安装STM32公司的 STM32 ST-LINK Utility v4.5.0 软件时,弹出了这个错误.弹框的内容大体是说找不到D盘,这里忘记截图了. 我的电脑的硬盘是我另一 ...
- MSYQL主从复制-Gtid方式
目录 1.MYSQL主从复制-Gtid方式 1.环境准备 2.Master配置 3.Slave配置 4.报错&解决 我叫张贺,贪财好色.一名合格的LINUX运维工程师,专注于LINUX的学习和 ...
- 机器学习--PCA算法代码实现(基于Sklearn的PCA代码实现)
一.基于Sklearn的PCA代码实现 import numpy as np import matplotlib.pyplot as plt from sklearn import datasets ...
- AcWing 901. 滑雪
地址 https://www.acwing.com/problem/content/description/903/ 题目描述给定一个R行C列的矩阵,表示一个矩形网格滑雪场. 矩阵中第 i 行第 j ...
- Go module的两个代理源和设置方法
Go module的两个代理源 阿里云 https://mirrors.aliyun.com/goproxy/ 使用帮助 1.使用go1.11以上版本并开启go module机制 2.导出GOPROX ...
- 【2019.10.7 CCF-CSP-2019模拟赛 T2】绝对值(abs)(线段树细节题)
找规律 设\(p_i=a_{i+1}-a_i\),则答案就是\(\sum_{i=1}^{n-1}p_i\). 考虑若将\(a_i\)加上\(x\)(边界情况特殊考虑),就相当于是将\(p_{i-1}\ ...
- SVO 特征对齐代码分析
SVO稀疏图像对齐之后使用特征对齐,即通过地图向当前帧投影,并使用逆向组合光流以稀疏图像对齐的结果为初始值,得到更精确的特征位置. 主要涉及文件: reprojector.cpp matcher.cp ...
- 《Spring Cloud微服务 入门 实战与进阶》
很少在周末发文,还是由于昨晚刚收到实体书,还是耐不住性子马上发文了. 一年前,耗时半年多的时间,写出了我的第一本书<Spring Cloud微服务-全栈技术与案例解析>. 时至今日,一年的 ...
- Swiper实现轮播图效果
为了实现轮播图(carousel)效果或左右滑动显示不同的内容,我们采用Swiper来实现. 需要引入swiper.min.css和swiper.min.js,文件可从https://github.c ...