javascript - Prototype 奇怪的支持环境检查

标签 javascript dom prototypejs

我正在查看 PrototypeJS 代码并发现了此检查 -

var div = document.createElement('div'),
      form = document.createElement('form'),
      isSupported = false;    
if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) {
    isSupported = true;
}

我想知道在什么情况下此条件返回 false -

div['__proto__'] !== form['__proto__']

注意:该函数的注释说 - “在内部用于检测浏览器是否支持扩展 html 元素原型(prototype)”。不确定这项检查有何帮助。

最佳答案

此测试允许 PrototypeJS 确定是否可以向特定类型的元素原型(prototype)添加特定方法。

例如,您不需要 getInputs() 方法(返回所有表单元素的数组)<div>元素,因为只有在 <form> 上使用它才有意义元素。

HTML

<div id='mydiv'></div>
<form id='myform'></form>

JS

$('mydiv').addClassName('newclass');  //does not error
$('myform').addClassName('newclass'); //does not error

$('myform').getInputs();              //does not error
$('mydiv').getInputs();               //throws error 'has no method getInputs()'

JSFiddle 上的示例 http://jsfiddle.net/C39gu/

关于javascript - Prototype 奇怪的支持环境检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18525565/

相关文章:

javascript - 在 javascript 中进行按位运算时我缺少什么?

javascript - 如何在气泡聊天 react native 有天赋的聊天下渲染项目时间?

jquery - 为什么 jQuery 会删除我的 DIV 中的内容以及如何阻止它这样做?

javascript - 观察者在 IE 中不起作用

javascript - 如何使用 jQuery 选择下拉选项?

Javascript 窗口关闭事件而不是所有浏览器的卸载事件

javascript - 在 dom 中,html 元素和片段之间的功能区别是什么?

javascript - 将 HTML 字符串转换为 DOM 元素?

javascript - 如何在 Element.select 的结果中包含当前元素?

php - 在 javascript 中传递数组元素作为 AJAX POST 请求的参数