一、proxy:
1、proxy的作用: (重点)
2、proxy代理格式:
let proxy = new Proxy ( target, property) ;
3、代理里面的方法
get(target,property)
set(target,property,value)
ownKeys拦截操作
has( )拦截操作:拦截key in object的操作,结果会返回一个布尔值。
proxy.revocable方法
会返回一个对象,对象中含有一个proxy属性 ,它就是Proxy的代理实例对象; 还有一个revoke属性 ,它是一个方法,用于取消代理。
let car = {
price : 100000 ,
color : "white" ,
power : "v8"
}
let proxyCar = new Proxy ( car, {
get ( target, property) {
if ( property == "price" ) {
return "车是120000,但是可以给你优惠,给你15000的优惠,车就是105000"
} else {
return target[ property]
}
} ,
set ( target, property, value) {
target[ property] = value
} ,
ownKeys ( ) {
return [ 'price' , 'color' ]
} ,
has ( target, property ) {
if ( target[ property] === undefined ) {
return false
}
return true
}
console. log ( proxyCar. price) ;
console. log ( proxyCar. color) ;
proxyCar. color = "black"
console. log ( proxyCar. color) ;
console. log ( Object. keys ( proxyCar) ) ;
console. log ( 'price' in proxyCar) ;
let carProxy = Proxy. revocable ( car, {
get ( target, property) {
return target[ property]
}
} )
console. log ( carProxy) ;
console. log ( carProxy. proxy. price) ;
carProxy. revoke ( ) -- -- -- -- -- -- -- -- --
console. log ( carProxy. proxy. price) ;
除了对象类型的变量可以被代理,函数也可以被代理。
如果被代理的变量是一个函数,那么还会支持一个拦截程序:apply调用。
二、for…of
1、可遍历对象:可以被for…of遍历的对象
数组、字符串、伪数组、Set、Map(不包括对象)
var arr = [ 1 , 2 , 3 , 4 ]
for ( let [ key, value] of arr. entries ( ) ) {
console. log ( key, value)
}
for ( let key of arr) {
if ( key == 2 ) {
continue
}
console. log ( key) ;
}
let word = "我是前端君"
for ( let w of word) {
console. log ( w)
}
var arr = [ 1 , 2 , 3 , 4 , 5 ]
for ( let key of arr. keys ( ) ) {
console. log ( key) ;
}
for ( let value of arr. values ( ) ) {
console. log ( value) ;
}
for ( let [ key, value] of arr. entries ( ) ) {
console. log ( key, value) ;
}
2、iterator遍历器
为什么不能遍历对象
因为对象上面没有(Symbol.iterator)方法
console. log ( Array . prototype) ;
console. log ( String . prototype) ;
console. log ( Set . prototype) ;
console. log ( Map . prototype) ;
console. log ( Object . prototype) ;
iterator原理
当可遍历对象被for…of遍历的时候,[Symbol.iterator]()
就会被调用,返回一个iterator对象。
var arr = [ 1 , 2 , 3 ]
let item = arr[ Symbol. iterator] ( )
console. log ( item) ;
for…of原理
当可遍历对象被for…of遍历的时候,[Symbol.iterator]()
就会被调用,返回一个iterator对象。 iterator对象里面有一个next()方法,调用next()方法,返回一个对象,对象里面有value和done属性,一直到done为true的时候结束执行
var arr = [ 1 , 2 , 3 ]
let item = arr[ Symbol. iterator] ( )
console. log ( item) ;
console. log ( item. next ( ) ) ;
console. log ( item. next ( ) ) ;
console. log ( item. next ( ) ) ;
console. log ( item. next ( ) ) ;
console. log ( item. next ( ) ) ;