隐式转换
var a = ?;
if(a == 1 && a == 2 && a == 3){
conso.log(1);
}
答案:
因为==会进行隐式类型转换 所以我们重写toString方法就可以了,toString 也可以换成 valueOf方法,valueOf 的优先级更高,
var a = {
i: 1,
toString() {
return a.i++;
}
}
if( a == 1 && a == 2 && a == 3 ) {
console.log(1);
}
代理拦截
如何实现 仍然打印 1
if(a === 1 && a === 2 && a === 3){
conso.log(1);
}
答案:
var value = 0; //window.value
Object.defineProperty(window, 'a', {
get: function() {
return this.value = this.value+ 1;
}
});