迭代器
https://zh.javascript.info/iterable
数组解构
https://zh.javascript.info/destructuring-assignment
JSON
https://zh.javascript.info/json#jsonparse
属性的读写性质
https://zh.javascript.info/property-descriptors
逐级defineProperty实验
var personA={name:'A',age:25,hobby:{basketball:'very well',piano:'so so'},secret:{s1:{name:'love',to:'person2'}}}const observe = data => {if (!data || typeof data !== 'object') {return}Object.keys(data).forEach(key => {let currentValue = data[key]observe(currentValue)Object.defineProperty(data, key, {enumerable: true,configurable: false,get() {console.log(`getting ${key} value now, getting value is:`, currentValue)return currentValue},set(newValue) {currentValue = newValueconsole.log(`setting ${key} value now, setting value is`, currentValue)}})})}observe(data)
数组排序
系统方法

原型和继承
https://blog.51cto.com/14047134/2319663
简书
Proxy发布订阅
// 'use strict'const myobservable = obj => new Proxy(obj, {set});const queuedObservers = new Set();const myobserve = fn => queuedObservers.add(fn);function set(target, key, value, receiver) {//Reflect.set返回Boolean// const result = Reflect.set(target, key, value, receiver);target[key]=valuequeuedObservers.forEach(observer => observer());// 严格模式下,Proxy Handler的set需要返回真,否则将报错//非严格模式下,可以不用下面这行// return result;}// 实例const person = myobservable({name: '张三',age: 20});function print() {console.log(`${person.name}, ${person.age}`)}myobserve(print);person.name = '李四';person.gh = '李四';console.log(person)// 输出
Proxy和Reflect发布订阅
// 'use strict'const myobservable = obj => new Proxy(obj, {set});const queuedObservers = new Set();const myobserve = fn => queuedObservers.add(fn);function set(target, key, value, receiver) {//Reflect.set返回Booleanconst result = Reflect.set(target, key, value, receiver);queuedObservers.forEach(observer => observer());// 严格模式下,Proxy Handler的set需要返回真,否则将报错//非严格模式下,可以不用下面这行return result;}// 实例const person = myobservable({name: '张三',age: 20});function print() {console.log(`${person.name}, ${person.age}`)}function print1() {console.log('hello')}myobserve(print);myobserve(print1);person.name = '李四';person.gh = '李四';// 输出
