我想编写一个名为SI的函数,它的工作原理如下(SI是if的法语单词),但是使用这种语法:
SI(condition)
ALORS{
function hello()
}
SINON{
function bye();
function goodbye();
}
在Javascript中它将是:
if(condition){
function hello();
}
else{
function bye();
function goodbye();
}
这可能吗?
谢谢!
答案 0 :(得分:5)
试试这个,
function si(condition) {
return {
alors: function(callback) {
if (condition) callback();
return this;
},
sinon: function(callback) {
if (!condition) callback();
return this;
}
};
}
var x = 0;
si(x == 1)
.alors(() => console.log("Bonjour!"))
.sinon(() => console.log("Au revoir!"));
这是如何运作的?
si
是一个返回对象的函数alors
和sinon
alors
是一个函数,它将另一个函数callback
作为参数,如果condition
(已传递给si
)为真,则alors
将执行回调函数() => console.log(...)
是function() { return console.log(...); }
的简写符号,用于创建匿名函数。答案 1 :(得分:1)
简短回答:不,你不能覆盖js的基础知识。但你可以模仿某种行为:
function si(condition,alors,sinon){
if(condition){
alors();
}else{
sinon();
}
}
像这样使用:
si(a==true,
//alors
function(){
alert("a");
},
//sinon
function(){
alert("no a");
});
或者:
function evaluate(obj){
if(obj.si){
obj.alors();
}else{
obj.sinon();
};
像这样使用:
evaluate({
si:a==true,
alors:function(){},
sinon:function(){}
});
您还可以将字符串编译为本机js,这将完全符合您的语法:
function frenchjs(string){
var translate={
si:"if",
sinone:"else"
};
for(key in translate){
string=string.replace(key,translate[key]);
}
eval(string);
}
像这样使用:
frenchjs("si(a==true){alert('a')}sinnon{alert('no a');}");