阅读更多
Sweet.js(糖包)是Mozilla的一个新项目,其将Scheme或Rust语言中的卫生宏(hygienic macros)带到了JavaScript平台。卫生宏是指展开宏时不会导致副作用,不会意外地捕捉到错误的标识。


通过宏可以更改JavaScript的语法,你可以巧妙地定制你一直想要的语言。比如:

嫌JavaScript中的“function”关键字太长?你可以使用def来定义函数。

def sweet(a) {
  console.log("Macros are sweet!");
}

宏是这样实现的:

macro def {
  case $name:ident $params $body => {
    function $name $params $body
  }
}

想用一种更好的方式来创建一个优雅的类:

class Person {
  constructor(name) {
    this.name = name;
  }

  say(msg) {
    console.log(this.name + " says: " + msg);
  }
}
var bob = new Person("Bob");
bob.say("Macros are sweet!");

通过宏可以这样实现:

macro class {
  case $className:ident { 
    constructor $constParam $constBody
    $($methodName:ident $methodParam $methodBody) ... } => {

    function $className $constParam $constBody

    $($className.prototype.$methodName 
      = function $methodName $methodParam $methodBody; ) ...

  }
}

该项目源码托管在Github上,基于2-clause BSD协议

官网:http://sweetjs.org/

源码:https://github.com/mozilla/sweet.js
  • 大小: 32.8 KB
0
1
评论 共 6 条 请登录后发表评论
6 楼 damoqiongqiu 2012-10-17 13:12
class Person {  
  constructor(name) {  
    this.name = name;  
  }  
//...

以上这段代码能写成这样就好了:
class Person {  
  Person (name) {  
    this.name = name;  
  }  
//...

因为单词constructor真心比较长,而且很容易拼错。
不过话说。。。那样挺像Java的
5 楼 lost_alien 2012-10-17 11:51
还嫌js不够乱啊,服了。。。。
4 楼 半人马 2012-10-17 10:14
NoWhy 写道
多一道工序,多一分错误。


与同样多一道工序的coffeescript, clojurescript相比又没有明显的优势。
3 楼 BuN_Ny 2012-10-17 08:56
NoWhy 写道
多一道工序,多一分错误。

其实这个东西作用还是有的,拿来定义javascript语言本身自然意义不大,如果可以定义一些DOM操作,做个template还是很方便的。而且它的价值应该不止这些。有机会研究下。
2 楼 NoWhy 2012-10-17 08:45
多一道工序,多一分错误。
1 楼 BuN_Ny 2012-10-17 08:28
             

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

Global site tag (gtag.js) - Google Analytics