问题&答案
什么时候 a 1 && a 2 && a==3 为 true?
var a = {
i: 1,
toString: function () {
return a.i++;
}
}
- 关键点在于==在比较的时候会进行类型转换,上例会调用a.valueOf(a.toString())来将a转换成Number数据类型,因此改写a的toString方法即可。
var a = [1,2,3];
a.join = a.shift;
- 同样的数组a在进行类型转换的时候会调用toString()的方法,而a.toString()其实调用的是a.join('')方法,因此修改a.join方法使其指向shift方法让其每次只输出第一个值,并且输出后从数组移除即可。
var val = 0;
Object.defineProperty(window, 'a', {
get: function() {
return ++val;
}
});
- 使用Object.defineProperty()方法为window添加a属性,修改其getter方法,使其依次返回val变量值。
参考资料
结束语
尺蠖之屈,以求信也;龙蛇之蛰,以存身也。与时屈伸。柔从若蒲苇,非慑怯也;刚强猛毅,靡所不信,非骄暴也。