我正在查看 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/