我有here的以下脚本:
function download(filename, text) {
var pom = document.createElement('a');
pom.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
pom.setAttribute('download', filename);
if (document.createEvent) {
var event = document.createEvent('MouseEvents');
event.initEvent('click', true, true);
pom.dispatchEvent(event);
}
else {
pom.click();
}
}
download('test.txt', 'Hello world!');
现在我不明白if (document.createEvent)
的用法:
我阅读了问题In JavaScript, does it make a difference if I call a function with parentheses?的答案并阅读了其他一些问题。
在大多数示例中都有某种引用,例如window.onload = initAll;
或var ret = Multiply;
,但这显然不是这种情况。对我来说最有趣的例子是:
function Multiply(operator, operand) {
return operator * operand;
}
var operator = 3;
var operand = 4;
var ret = Multiply;
此处,据作者称,Multiply
未执行,ret
引用了函数Multiply
。
同样here声明调用没有括号的函数是一个参考。
但这让我更加困惑,因为对我来说,document.createEvent
的引用,这是一个创建事件的函数,没有意义。
关于函数document.createEvent()
的文档,例如here,并未指出不带参数的用法。
所以,请为我的大脑黑暗带来一些亮点。 感谢您的帮助。
问题(简称):
document.createEvent
是函数调用还是引用?document.createEvent
返回什么?答案 0 :(得分:3)
document.createEvent
是函数调用还是引用?
尝试访问document
对象上的属性。
该财产可能存在。它可能有价值。该值可能是对函数的引用。
如果所有这些都是这种情况,那么它将是一个真值(并且if
块将运行)。如果它不存在,则它将是一个错误值(并且else
块将运行)。
这是测试浏览器是否支持该功能的测试。
document.createEvent返回什么内容?
财产的价值。如果浏览器支持createEvent
,那么它将评估为函数,这是一个真值。
答案 1 :(得分:2)
document.createEvent
是函数调用还是引用?
它是表示document
对象属性的表达式。一个人希望它的值是对将创建一个事件的Function
对象的引用,但它也可能是undefined
。
document.createEvent
返回什么?
作为表达式,它计算所述属性的当前值。
答案 2 :(得分:1)
1 - JavaScript具有 truthy 和 falsy 值。诸如0,"",undefined,null之类的值是 falsy 值,而1,-1或" text"以及例如现有属性一个对象 truthy 。 (如果他们的价值不是假的!) 2-因为 createEvent 是 document 对象的属性,所以代码片段基本上测试了该函数的存在性,这意味着它的存在是真实的。我假设此检查与浏览器兼容性和放大器有关。方法弃用。 您可以阅读here
中的详细信息