阅读更多
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
             

发表评论

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

相关推荐

  • sweet-core:改善您JavaScript

    JavaScript的卫生宏! 宏使您可以构建自己的梦想语言。 通过为代码定义新语法来使JavaScript变得甜美。 目前,Sweet应该被认为是实验性的,并且正在大量开发中... 在IRC上闲逛:irc.mozilla.org和上的#sweet.js。

  • Mozilla Sweet.js:用宏扩展JavaScript

    Mozilla Sweet.js使开发人员能够通过使用宏在语言中添加新的语法以丰富JavaScript。这有助于开发者们为自己的风格定制JavaScript语法,或是为他们的空白领域,创建基于JavaScript的领域专用语言来扩展JavaScript。\u...

  • JavaScript 的宏扩展 Sweet.js

    Sweet.js 是 Mozilla 开发的,为 JavaScript 带来类似 Schema 和 Rust 的宏功能,宏可以让你使用自己想要的方式来扩展 JavaScript 语言。 示例代码: def sweet(a) { console.log("Macros are sweet!"); } macro def...

  • 为啥要 sweet.js

    from http://jlongster.com/Why-sweet.js-Matters (Update Jan. 10, 2014: if you like this post, you should read my much more recent post "Stop Writing JavaScript Compilers!...

  • 11. JavaScript 正则表达式

    2019全新javaScript进阶面向对象ES6 文章目录1. 正则表达式概述2. 正则表达式在 JavaScript中的使用2.1 创建正则表达式2.2 测试正则表达式 test3. 正则表达式中的特殊字符3.1 正则表达式的组成3.2 边界符3.3 字符类...

  • 第三章: HTML、CSS、JavaScript终极篇

    文章目录第三章: HTML、CSS、JavaScript终极篇jQuery框架基本选择器组合选择器基本筛选器属性选择器表单筛选器注意事项筛选器方法(多了解一点)样式操作文本操作属性选择器标签操作事件操作事件案列事件冒泡文档加载...

  • 使用ES6,Pt更好JavaScript。 III:酷收藏和闪烁的弦

    ES2015对语言进行了一些重大更改,例如promise和generators 。 但是,关于新标准的所有内容并非都是具有里程碑意义的附加功能-便捷的方法中有很多功能可以快速学习和使用。 In this article, we'll take a look at ...

  • JavaScript库资源

    包管理器 托管JavaScript库并提供用于获取和打包它们的工具。 npm - npm是JavaScript的包管理器。 Bower - 网络包管理器。... volo - 从模板创建前端项目,添加依赖项并自动生成项目。 Duo - 下一代软件包管理器,

  • 前端资料大全

    es6 http://es6.ruanyifeng.com 阮一峰 Javascript http://javascript.ruanyifeng.com ECMA-262,第 5 版 http://yanhaijing.com/es5 es5 http://es5.github.io  Js template template-chooser ...

  • 3 JavaScript 对象与内置对象

    声明:本人前端学习笔记的...JavaScript系列 :JavaScript基础语法-dom/bom-es6-jQuery-数据可视化echarts-包含笔记源码作业黑马程序员pink老师前端入门视频教程(持续更新) 文章目录一、JavaScript 对象1. 对象2. 创

  • 超实用的css代码段_快速启动您的项目:便捷CSS代码段集合

    When every required field is properly filled, remove this class with JavaScript. Clean and simple, it helps the user understand he did everything right. 一个实际的例子是将此类作为默认的表单提交按钮。...

  • 【收藏】前端开发必备:前端开发不得不收藏的网站,提高200%开发效率!

    本项目为个人技术收藏集,里面会不定期分享一些作者平时用到的一些库,或者常用的网站和小工具。同时作者也会在上面不定期的写一些简单的博文 如果你有好的推荐你可以提 issue 或者 pr 来告诉作者 推荐库 前端常用...

  • 给JavaScript 初心者的ES2015 实战

    原文是http://lifemap.in/es2015-in-action/,对于Javascript ES6 介绍的比较全面。前言历时将近6年的时间来制定的新ECMAScript标准ECMAScript 6(亦称ECMAScript Harmony,简称ES6)终于在2015年6月正式发布。自从...

  • Sweet32: TLS 64位分组密码生日攻击(CVE-2016-2183)

    客户服务器被发现Sweet32,经过检查,都是受DES/3DES影响导致的,解决办法就是禁用了DES/3DES。 验证方式:nmap -sV --script ssl-enum-ciphers -p 443 test.com 以下是我从网络上找到的一些信息: 概述 分组密码...

  • 在Javascript正则表达式中使用的转义字符串[重复]

    本文翻译自:Escape string for use in Javascript regex [duplicate] This question already has answers here : 这个问题已经在这里有了答案 : Closed 7 years ago . 7年前关闭。 Possible Duplicate: 可能重复:...

  • Firefox主题:Sweet_Pop! 美化,自定义Firefox。 Firefox的极简主义oneliner主题与Sweet Dark完美匹配

    宝贝! 浮动导航 自动隐藏滚动条 ... 此启动脚本从utils文件夹中添加“加载程序”脚本,该脚本将配置文件文件夹中的任意javascript文件加载到Firefox中(在这种情况下, hide scrollbar.uc.js ) moz

  • 前端知识库 code_xzh 2017-03-02 22:30:55 浏览20219 评论18 javascript html5 react 性能 HTTPS http js 浏览器 angular

    javascript html5 react 性能 HTTPS http js 浏览器 angular jquery 插件 html github 摘要: 前端开发全面知识库,包括HTML5,CSS3和js的基本框架知识,以及DOM和BOM操作的基础知识和一些基本工具...

  • 基于springboot大学生就业信息管理系统源码数据库文档.zip

    基于springboot大学生就业信息管理系统源码数据库文档.zip

  • 基于java的驾校收支管理可视化平台的开题报告.docx

    基于java的驾校收支管理可视化平台的开题报告

  • 原木5秒数据20241120.7z

    时间序列 原木 间隔5秒钟 20241120

Global site tag (gtag.js) - Google Analytics