2016-12-30 91 views
4

我想编写一个名为SI功能,其工作方式,如果(SI是法语单词如果),但与此语法:功能IF但在法国

SI(condition) 
ALORS{ 
function hello() 
} 
SINON{ 
function bye(); 
function goodbye(); 
} 

在Javascript中这将是:

if(condition){ 
    function hello(); 
} 
else{ 
function bye(); 
function goodbye(); 
} 

这可能吗?

谢谢!

+6

的可能的复制[编写JavaScript在其他语言(http://stackoverflow.com/questions/839966/write-javascript-in-其他语言) – tomepejo

+0

另外检查:http://stackoverflow.com/questions/12840610/overwriting-javascript-keywords – tomepejo

+0

事实是,你不能完全通过使用JavaScript来实现你所需要的。收益总是远远低于构建它的时间和金钱的损失。您可以构建基于JavaScript语法的法语/ JavaScript编译器,但这需要花费大量时间和精力。 –

回答

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是一个返回对象的函数
  • 该对象具有两个功能,alorssinon
  • alors是一个函数,它的另一功能callback作为参数,如果condition(其已经传给si )是真的,那么alors将执行回调函数
  • () => console.log(...)function() { return console.log(...); }的简写符号,其创建anonymo我们的功能。
+0

谢谢!它工作得很好,并且可以有几个功能来运行 – rognntudjuu

+0

@rognntudjuu de rien,很高兴听到!最好接受带有复选标记的答案。 – akuhn

+0

我想你的答案适应REPETER功能: – rognntudjuu

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,这将有exa ctly你的语法:

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');}"); 
+0

谢谢,它运作良好! – rognntudjuu