我对HTML / CSS / PHP / MySQL有足够的了解,但Javascript对我来说仍然是一个巨大的障碍。无论出于何种原因,我的老师都希望我们简化这段愚蠢的代码,但是如何去做呢?
function f(a, b, c) {
return function() {
return a[b](c);
}
}
window.onload = f(document, "write", "hi!");
我想过
function f(a, b, c) {
return a[b](c);
}
window.onload = f(document, "write", "hi!");
但它不能简单地这么简单吧?推动正确的方向将是非常不利的!
编辑:谢谢你们。而不是给我一个推动,你已经走出了自己的方式(甚至疯狂的人,哇)为我创造这个。幸运的是,他想知道的是我将如何做到这一点,这就是今年的所有Javascript。很有责任!
答案 0 :(得分:3)
我想他希望你意识到调用f
会返回另一个函数。
function f(a, b, c) {
return function() {
return a[b](c);
}
}
这是一个在运行时返回另一个函数的函数。所以
window.onload = f(document, "write", "hi!");
最终会像
一样window.onload = function() { return a[b](c); }
其中a
,b
和c
绑定到您传入的值。所以写一下这样的内容,但替换a
,b
和c
具有正确的值。它最终为return document["write"]("hi")
,也可以写成return document.write("hi")
。插入:
window.onload = function() {
return document.write("hi");
}
这是等效的。
答案 1 :(得分:2)
或者只是
document["write"]("hi");
另一种方式是document.write("hi");
编辑:哎呀,忘了你需要做这个onload,
window.onload = function() {
return document.write("hi");
}
答案 2 :(得分:2)
也许他只是想着
window.onload = function() {
document.write("hi");
};
(这是一个愚蠢的例子,等待页面加载只是用“hi”覆盖它。)
答案 3 :(得分:2)
这或许?
window.onload = document.write.bind(document, 'hi!');
答案 4 :(得分:2)
您提出的解决方案不起作用:document.write
将在调用f
时立即运行,而不是响应load
事件。原始函数f
实际上返回一个新函数;您的示例立即调用函数并返回结果。
如果查看MDN page on window.onload
,您会看到onload
应设置为函数:
window.onload = function() {
init();
doSomethingElse();
};
很明显代码应该document.write
一条消息,所以将代码放在onload
函数处理程序中。你会得到更短(但更不那么抽象)的代码来达到同样的效果。
答案 5 :(得分:1)
我非常确定你的导师想要保持函数抽象,也就是说,没有嵌入其中的值。这样你就可以将任何对象,方法和值传递给它,它会起作用。你的非常接近。其他人提请注意一些问题。如果您希望代码在页面加载时执行,这应该有效:
function f(a, b, c) {
a[b](c);
}
f(document, "write", "hi!");
您可以保留onload处理程序,但请注意它将完全覆盖现有文档。也许这个家伙想要那个。但这听起来很愚蠢。这看起来像这样:
function f(a, b, c) {
a[b](c);
}
window.onload = function () {
f(document, "write", "hi!");
};