这个问题可能不清楚,所以我在这里将其清除。我正在使用require.js导入脚本中的脚本。这是一段代码:
var vr = {};
vr.example = function(func) {
return require(["https://example.com"], func);
};
所以,现在我可以通过以下方式调用它:
vr.example( function() { .... });
但是,我正在考虑不在每次必须调用该函数时编写该函数。我想写这样的东西:
vr.example({ ... });
并且结果应该相同。但是我不明白该怎么做。所以请帮忙
谢谢。
答案 0 :(得分:1)
您想要的事情无法用JavaScript完成!但是有一种方法可以做,就是翻译。这是一个基本的例子。我真的不建议这样做,我只是向您展示一种可能性;)
window.InterpretData = function() {
var el = document.querySelectorAll("script[type='text/test']") // You can change it anyway !
for(var i = 0; i < el.length; ++i) { // You can use i++ instead of ++i, but ++i is much optimised for this function, watch out their differences in the internet.
var val = el[i].innerHTML
var crt = document.createElement("script")
crt.id = "InterpretedScript"
document.getElementsByTagName("body")[0].appendChild(crt) // Creating a new script element
val = val.replace(/\.example\(\{([\S\s]*?)\}\)/gm, function(_, a) { // Wish you are familiar with regular expressions
a = ".example( function() {" + a + "})"
document.getElementById("InterpretedScript").innerHTML += a;
}
}
}
现在您可以:
<!DOCTYPE html>
<body>
<script type="text/test">
// Defining
var vr = {};
vr.example = function(func) {
return require(["https://example.com"], func);
};
// Calling
var.example({ ... })
<script>
<script>
new InterpretData()
</script>
</body>
</html>
输出:
vr.example({ ... }) converts to vr.example( function() { ... })
好吧,请记住该示例只是为了给您一个解决问题的可能性的想法。尽管您不能再次对包含不同参数的任何其他常量/变量声明“ example()”,但这并不是完美的解决方案!因此,唯一的方法就是要么使用ES6的粗箭头(=>),要么就更早地声明该函数并继续重用它!如果您必须支持旧的浏览器,而不是使用@mbojko所示的重用技术,或者只使用ES6的粗箭头,@ deceze先前曾说过。所以,你想吗?
答案 1 :(得分:0)
那么,您要传递没有用函数包装的代码块吗?简短的答案:您无法在JavaScript中做到这一点。而且require.js确实希望有回调函数。
如果回调函数是可重用的,则可以声明一次并按如下方式重用它:
function myReusableCallback(args) {
//...
}
vr.example(myReusableCallback);
差不多了。
答案 2 :(得分:0)
因为从require()
返回的vr.example()
函数需要一个回调函数,并且由于该回调函数通常是由vr.example的调用提供的,因此,它意味着您不必调用随便添加对象。因此,只有在require()
期望没有回调的情况下,或者如果您有始终要执行的静态函数时,才可以使用对象,然后可以在vr.example和然后只需在函数内部传递您需要使用的对象即可。
答案 3 :(得分:-1)
这是不可能的,因为{}
不是函数,而是对象。
您可以使用typeof({})
自己尝试一下,然后将其与typeof(() => {})
或typeof(function() {})