JavaScript 事件代理(委托)

在浏览器设计过程中,关于交互,会面临一个很基本的问题:页面元素层层嵌套,那么当用户点击页面上某个区域的时候,用户真正感兴趣的到底是哪个元素呢?

举个例子:当你点击了一个按钮,你确实是点击了这个按钮,但同时你实际上也点击了按钮所在的 div 区域,body 元素以及 html 元素等等,浏览器怎么知道你想点的到底是哪个元素呢?

对此,dom 标准事件流规定:当一个事件发生后,会经过 3 个传播阶段:

More

toString.call() 引起的一些思考

toString 作为全局方法时,挂载于window全局对象。原型链最顶层的原型对象 Object.prototype 有 Object.prototype.toString 方法(其实,这个方法就是和全局的toString 是同一方法),另外,一些内置构造函数Array、String、Boolean、Function、Date等也都分别部署了自己的toString方法。

为了方便下文的理解,在这里再强调一下原型链的作用:读取对象的某个属性时,JavaScript引擎先寻找该对象本身的属性,如果找不到,就到它的原型去找,如果还是找不到,就到原型的原型去找,直到顶层原型对象 Object.prototype。如果一层层回溯到最顶层还是找不到,则返回undefined。

More

JavaScript 24 点游戏算法

24 点:棋牌类益智游戏,要求 4 个数字运算结果等于 24。这个游戏用扑克牌很容易开展,拿一副牌,抽去大小王后以及 J/Q/K 后,剩下 1~10 这 40 张牌(以下用 1 代替 A)。任意抽取4张牌(称为牌组),用加、减、乘、除(可加括号,高级玩家也可用乘方开方运算)把牌面上的数算成 24。每张牌必须且只能用一次。比如抽出的牌是 3、8、8、9,那么算式可以为 (9-8)×8×3=24。

More

JavaScript 排序算法

排序算法作为老生常谈的话题,其实现方式多种多样,这里给出冒泡排序、选择排序、插入排序、合并排序、快速排序等 5 种排序的一种实现,以便将来参考和在此基础上改进。

More