我希望能够在javascript中定义一个语句。例如,我想定义
一个名为file的语句,类似于一个类。
function file() {
//code goes here
}
我希望将其用作语句,例如if
,for
和return
。
file filename(filename,purpose) {
//code goes here
}
我是否需要构建单独的编译器或者是否可能? 如果有更好的说法,请更改标题。
答案 0 :(得分:0)
你想要完成什么?
在JavaScript中模拟某些类类结构另外,我从未见过像你所描述的那样的类工作 - 通常你实例化一个类的对象,然后访问该对象的公共属性。这可以在JavaScript中完成('cept对象是动态创建的)。例如:
// file 'class'
var file = function () {
var a; // private variable
function filename(name, purpose) {
// code goes here
}
// return public members
return {
filename: filename
};
};
// An object created from your 'class' with the member function 'filename()'
var aFile = file();
然后使用.
运算符调用您的成员函数,如下所示:aFile.filename(name, purpose);
答案 1 :(得分:0)
这将是基于Javascript编写一种新语言,就像Coffeescript一样。例如,这些语言在被提供给Web浏览器之前需要将编译为 JS。
看看Coffeescript - > JS解释器知道如何解决这个问题。为了记录,我不认为这是一个好方法。
最后,我要注意像Scala这样的语言具有非常好的DSL支持,这意味着在语言中添加功能很容易。例如,Scala中的偶数+是库代码,而不是本机代码。 (从技术上讲,从语言的角度来看,可以这样写。)
答案 2 :(得分:0)
我希望能够在javascript中定义一个语句。
我希望将其用作语句,例如if,for和return。
否,你不能这样做,因为Javascript解析器无法解析它。
如果您真的希望这样做,您唯一的选择就是创建自己的语言,并将您的新语言的转录器编写为Javascript,正如@djechlin指出的那样。
答案 3 :(得分:0)
我相信您想要的是实现控制结构而不是语句,因为您提供的示例if
,for
和return
是控制结构。如果那就是你真正的意思那么,你可以用函数来做,但不能用你描述的语法。
在javascript中,函数是第一类对象。也就是说,它们可以分配给变量并作为参数传递给其他函数。例如,这里的if
实现不使用内置控件结构(没有if
,while
,switch
等,也没有三元运算符) :
function IF (condition, callback) {
[function(){}, callback][+!!condition]();
}
您可以使用上述函数替代if
,但语法有点不同寻常:
IF ( a == b, function(){
console.log('hello');
});
但是,如果你已经对javascript进行了足够长时间的编程,那么上面的语法就会很熟悉,你会遇到很多类似的控制结构,如[].forEach()
和setTimeout()
这样的函数。
因此,如果你想实现一个控制结构来解析一个文件,你可以这样做:
function parseFile (filename, callback) {
// code to process filename
callback(result);
}
甚至是这样的事情:
function eachLine (filename, callback) {
// code to process filename
for (var i=0; i<file_content.length; i++) {
callback(file_content[i]);
}
}
你可以这样使用:
eachLine("some_file.txt",function(line){
if (line.match(/hello/)) {
console.log('Found hello! This file is friendly.');
}
});
答案 4 :(得分:0)
如果不需要参数,可以执行以下操作:
Object.defineProperty(window, 'newcmd', {
get: () => console.log("hello")
})
newcmd