繁体   English   中英

Javascript-创建自己的条件/控制流

[英]Javascript - Create Own Condition/Control Flow

是否可以在js中创建您自己的条件/控制流语法? 例如:

when( condition ) {
 // execute code
}

这将在变量/对象中添加某种侦听器,并在条件为真时执行。

我可能只需要创建自己的编程语言。

这实际上是两个问题:

  1. 可以直接将语法添加到JavaScript吗?
  2. 我可以设置在条件改变时运行的代码吗?

第一个答案是否定的。 您可以使用诸如sweet.js宏之类的预处理来完成此任务,但它并不简单。

2的答案是肯定的,您可以在任何符合ES 5的环境(IE 9+)中完成此任务:

var condition = {val: null};
Object.defineProperty(condition, "isTrue", {
  set: function(val) {
    if (val && !this.val) {
      runSomeCodeYouWantRun();
    }
    this.val = val;
  },
  get: function() {
    return this.val;
  }
});

因此,每当任何代码更改condition.isTrue ,如果更改是正确的,则将运行指定的代码。 但是对于这种情况,我宁愿使用临时方法。 ES 2015代理陷阱可以使它变得更加整洁(IMHO),但尚不完全支持。 您在这里真正想要完成今天工作的真正目的是“ 可观察”

还要注意,编写一种语言来解决此类问题大致相当于用零配件制造一辆汽车,然后开车去杂货店。 刚买车。

欢迎来到JavaScript翻译器的美好世界。

JavaScript本身没有任何实用程序来创建自己的语法。 为此,在线和NPM存储库中存在许多工具,它们通过将其转换为与浏览器兼容的JavaScript来向JS添加这种功能。 这是一个小样本:

  • Babel.js在ES5 JavaScript中添加了ES6语法
  • Browserify添加了Node.JS的require()功能
  • Uglify.JS将JS压缩为可能仍将以相同方式执行的最小形式
  • TypeScript (更严格地说是其自身的语言)在JavaScript中添加了静态类型检查

所有这些编译器,无论如何不同,都以相同的方式工作:它们将源文件解析为抽象语法树(或AST),在该树上运行一些转换,然后吐出生成的JavaScript文件。 如果您想在JavaScript中创建自己的特殊语法,则可能会或多或少地做同样的事情。 (Uglify.JS在这方面特别可定制)。


综上所述,所有这些编译器都没有从根本上改变JavaScript的工作方式-您仍然必须将想要使用的任何精美语法转换为浏览器可执行的普通JavaScript。 这意味着,尽管您将能够编写when(){}块语法,但是括号内的表达式不能是简单的Boolean表达式,而必须包含类似于Observable对象,该对象会插入回调( Knockout.JS确实具有工具(通过其Observables构建的表达式)来执行此操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM