SlideShare a Scribd company logo
JS2 JS2 = JavaScript*JeffSu
我们遇到的问题 复杂的 javascript 应用,需要可靠的架构 大量 javascript 代码,需要良好的组织性 大量应用与 DOM 紧密结合 需要更加容易使用的继承和引用的实现 需要快速高效的 javascript 开发平台 易读的代码
我们的解决方案 JS2 javascript 伪代码 更加类似 Ruby , Java 的 OO 语法 可通过编译实现多重继承等更多特性 基于 HAML 的 htmlCache 可自定义的 javascript 语法实现
使用 JS2 gem install js2 js2 public/javascripts app/js2 js2 -d public/javascripts app/js2
Javascript 的类定义 通过定义 prototype  var MyClass = function () { }; MyClass.prototype = { member1: "member1", method1: function () { alert("method1 called"); } } 直接定义函数体 var MyClass = function () { this.member1 = “member1”; this.method1 = function () { alert(“method1 called”);  } }
Javascript 的类定义 通过一些 javascript 框架 var MyClass = Class.create({ member1: "member1", method1: function () { alert("method1 called"); } });
JS2 类定义语法 class MyClass { var member1 = "member1”; function method1 () { alert("method1 called"); } }
JS2 的类继承 class Vehicle { function drive () { alert('drive'); } } class Car extends Vehicle { function drive () { _super(this); alert('with car'); } } 优点 简洁的语法 实现了 super
Getters and Setters Javascript 实现 Duck.prototype = { setColor: function (color) { this.color = color; }, getColor: function () { return this.color; } } ; JS2 实现 class Duck { property color;  }
糅合( Mixins ) module Flyable { function fly () { alert('Flying!'); } } class Bird { include Flyable; } class Duck { include Flyable; }
静态方法 用于解决类似于唯一实例等问题 class Human { static function getCount () { return this.count; } static function create () { if (this.count) {  this.count++; } else { this.count = 1; } return new this(); } }
闭包 var nonScoped = [ ... lots of data .. ]; var submitBtn = new Button(); 无闭包的 javascript Document.getElementById(‘submitBtn’).onClick = function () { submitBtn.click(); } Javascript 闭包 Document.getElementById(‘submitBtn’).onClick = function (submitBtn) { return function (e) { submitBtn.click();}; }(submitBtn); JS2 闭包 Document.getElementById(‘submitBtn’).onClick = curry (e) with (submitBtn) { submitBtn.click(); };
foreach 语法 Javascript 数组循环 for(var i=0,len=array.length,item; (item=array[i]) || i<len; i++) { …… } JS2 foreach foreach (var item in array) {} foreach (var item:i in array) {}
HTML Cache //--- in uiBuilder.js2.haml UIBuilder button(name) %div.button= &quot;#name#&quot; //--- in uiBuilder.js2 class UIBuilder { function getButton (name) { this.htmlCache.button(name); } }  //-- in uiBuilder.js UIBuilder.prototype = { htmlCache: {&quot;button&quot;: function(name){return &quot;<div class='button'>&quot;+name+&quot;</div>&quot;}} };
更多特性 对 Selenium 测试的支持 可嵌入 HAML 不断升级添加中
JS2 Wiki http://code.google.com/p/js2lang/
谢谢

More Related Content

PPT
Ken20150320
PPTX
Script with engine
PDF
Java script closures
ODP
Object-Based Programming Part II
PDF
潜力无限的编程语言Javascript
PPT
Js培训
PPTX
JavaScript 闭包分享(一):传递参数
PPTX
前端测试
Ken20150320
Script with engine
Java script closures
Object-Based Programming Part II
潜力无限的编程语言Javascript
Js培训
JavaScript 闭包分享(一):传递参数
前端测试

What's hot (18)

PDF
Ecmascript
PDF
JavaScript 教程
PDF
Jni攻略之十一――启动虚拟机调用Java类
PPT
改善程序设计技术的50个有效做法
PPTX
PDF
Javascript 闭包
PPT
Java script 编程 第2课 条件与循环
PPTX
QML 與 C++ 的美麗邂逅
PPTX
JavaScript closures
ODP
JavaScript Advanced Skill
DOC
中心教员J2 Ee面试题
PPT
Php & Mysql
DOC
用Jquery实现拖拽层
PDF
Node way
PDF
Node.js开发体验
PPTX
Javascript share
PPT
Clean code_1_Nameing
Ecmascript
JavaScript 教程
Jni攻略之十一――启动虚拟机调用Java类
改善程序设计技术的50个有效做法
Javascript 闭包
Java script 编程 第2课 条件与循环
QML 與 C++ 的美麗邂逅
JavaScript closures
JavaScript Advanced Skill
中心教员J2 Ee面试题
Php & Mysql
用Jquery实现拖拽层
Node way
Node.js开发体验
Javascript share
Clean code_1_Nameing
Ad

Similar to JS2 (17)

PPT
Java Script 引擎技术
PPT
Javascript之昨是今非
PPTX
Ecma script edition5-小试
PPT
Underscore
PPT
Javascript Training
PPT
javascript的分层概念 --- 阿当
PPT
基于J2 Ee的Web应用
PPT
Javascript OOP
PPT
Web设计 3 java_script初探(程序员与设计师的双重眼光)
PDF
Javascript primer plus
PDF
Javascript进阶编程
PDF
SeaJS 那些事儿
DOC
J S教材
PPTX
Js高级技巧
PPTX
追风堂 Javascript
PDF
Banquet 15
PDF
JavaScript Engine
Java Script 引擎技术
Javascript之昨是今非
Ecma script edition5-小试
Underscore
Javascript Training
javascript的分层概念 --- 阿当
基于J2 Ee的Web应用
Javascript OOP
Web设计 3 java_script初探(程序员与设计师的双重眼光)
Javascript primer plus
Javascript进阶编程
SeaJS 那些事儿
J S教材
Js高级技巧
追风堂 Javascript
Banquet 15
JavaScript Engine
Ad

More from Jiang Wu (7)

PDF
Python speed up with numba
PDF
Implement Web API with Swagger
PDF
API documentation with Swagger UI(LT)
PDF
用Ruby编写博客应用
PDF
Sinatra and friends
PDF
Rubyconf China
ODP
Ruby off Rails---rack, sinatra and sequel
Python speed up with numba
Implement Web API with Swagger
API documentation with Swagger UI(LT)
用Ruby编写博客应用
Sinatra and friends
Rubyconf China
Ruby off Rails---rack, sinatra and sequel

JS2

  • 1. JS2 JS2 = JavaScript*JeffSu
  • 2. 我们遇到的问题 复杂的 javascript 应用,需要可靠的架构 大量 javascript 代码,需要良好的组织性 大量应用与 DOM 紧密结合 需要更加容易使用的继承和引用的实现 需要快速高效的 javascript 开发平台 易读的代码
  • 3. 我们的解决方案 JS2 javascript 伪代码 更加类似 Ruby , Java 的 OO 语法 可通过编译实现多重继承等更多特性 基于 HAML 的 htmlCache 可自定义的 javascript 语法实现
  • 4. 使用 JS2 gem install js2 js2 public/javascripts app/js2 js2 -d public/javascripts app/js2
  • 5. Javascript 的类定义 通过定义 prototype var MyClass = function () { }; MyClass.prototype = { member1: &quot;member1&quot;, method1: function () { alert(&quot;method1 called&quot;); } } 直接定义函数体 var MyClass = function () { this.member1 = “member1”; this.method1 = function () { alert(“method1 called”); } }
  • 6. Javascript 的类定义 通过一些 javascript 框架 var MyClass = Class.create({ member1: &quot;member1&quot;, method1: function () { alert(&quot;method1 called&quot;); } });
  • 7. JS2 类定义语法 class MyClass { var member1 = &quot;member1”; function method1 () { alert(&quot;method1 called&quot;); } }
  • 8. JS2 的类继承 class Vehicle { function drive () { alert('drive'); } } class Car extends Vehicle { function drive () { _super(this); alert('with car'); } } 优点 简洁的语法 实现了 super
  • 9. Getters and Setters Javascript 实现 Duck.prototype = { setColor: function (color) { this.color = color; }, getColor: function () { return this.color; } } ; JS2 实现 class Duck { property color; }
  • 10. 糅合( Mixins ) module Flyable { function fly () { alert('Flying!'); } } class Bird { include Flyable; } class Duck { include Flyable; }
  • 11. 静态方法 用于解决类似于唯一实例等问题 class Human { static function getCount () { return this.count; } static function create () { if (this.count) { this.count++; } else { this.count = 1; } return new this(); } }
  • 12. 闭包 var nonScoped = [ ... lots of data .. ]; var submitBtn = new Button(); 无闭包的 javascript Document.getElementById(‘submitBtn’).onClick = function () { submitBtn.click(); } Javascript 闭包 Document.getElementById(‘submitBtn’).onClick = function (submitBtn) { return function (e) { submitBtn.click();}; }(submitBtn); JS2 闭包 Document.getElementById(‘submitBtn’).onClick = curry (e) with (submitBtn) { submitBtn.click(); };
  • 13. foreach 语法 Javascript 数组循环 for(var i=0,len=array.length,item; (item=array[i]) || i<len; i++) { …… } JS2 foreach foreach (var item in array) {} foreach (var item:i in array) {}
  • 14. HTML Cache //--- in uiBuilder.js2.haml UIBuilder button(name) %div.button= &quot;#name#&quot; //--- in uiBuilder.js2 class UIBuilder { function getButton (name) { this.htmlCache.button(name); } } //-- in uiBuilder.js UIBuilder.prototype = { htmlCache: {&quot;button&quot;: function(name){return &quot;<div class='button'>&quot;+name+&quot;</div>&quot;}} };
  • 15. 更多特性 对 Selenium 测试的支持 可嵌入 HAML 不断升级添加中