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啊. 不得不承认与大神之间的差距,回来深思了这个问题,结合以前的知识,算是有了点眉目. ...
随机推荐
- benchmarks (主要用于分布式文件系统性能测试)
最近进行学习过程中,遇到一些可以用得上的benchmark,在这里进行简要记录:之后估计会用到 TensorFlow benchmarks https://github.com/tensorflow/ ...
- ssh免密登录配置后,登陆失败问题
本文转自博主:_Lance 本文转自:https://blog.csdn.net/qq_19648191/article/details/54845440 相关资料http://blog.csdn.n ...
- 算法设计与分析 1.2 不一样的fibonacci数列
★题目描述 fibonacci 数列的递推公式是F(n) = F(n-1) + F(n-2)(n >= 2 且 n 为整数). 将这个递推式改为F(n) = aF(n-1) + bF(n-2)( ...
- 剑指Offer-28.数组中出现次数超过一半的数字(C++/Java)
题目: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.如 ...
- 解决Fiddler在win7系统下的安全证书问题
如果电脑win7系统,一直解决不了Fiddler的证书安装问题,可以试试下面的办法. 在安装证书的时候一直遇到这个问题. 这是因为win7系统的在.net Framework4.0上面的bug引起的. ...
- antd配置config-overrides.js文件
下载antd 包 npm install antd 下载依赖包(定义组件按需求打包) npm install react-app-rewired customize-cra babel-plugin- ...
- IT兄弟连 Java语法教程 逻辑运算符
表8中显示的布尔逻辑运算符只能操作布尔类型的操作数,所有的二元逻辑运算符都可以组合两个布尔值,得到的结果为布尔类型. 表8 布尔逻辑运算符 布尔逻辑运算符”&“.”|“以及”^“,都会布尔值 ...
- Protractor - 环境设置
去年出于好奇搭建过一个Protractor+Cucumber的测试框架,当时项目上并没有用到AngularJS,所以框架能运行起来之后没有再深入了.最近新项目引入了AngularJS,想起去年搭的那个 ...
- 支付签名 MD5Util 排序工具类
package com.skynet.wechat.wxPay.common; import java.security.MessageDigest; import java.util.Iterato ...
- centos7开启,关闭防火墙
1.查看防火墙状态 firewall-cmd --state 2.停止防火墙 systemctl stop firewalld.service 3.禁止防火墙开机启动 systemctl disabl ...