SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Downloaden Sie, um offline zu lesen
Javascript primer plus
        blankyao
目录:

       几个知识点
       几种事件处理模型
       异步编程
       CommonJs介绍
       未来的javascript
       开发工具
       推荐书籍
       推荐阅读资料
       参考资料
几个知识点




  –上下文
  –作用域链
  –闭包
  –原型
  –继承
几个知识点——上下文


当前代码执行所处的环境(this所指的对象)


可以通过apply/bind/call来改变上下文


示例:apply.js
几个知识点——作用域链(1)

JavaScript中的函数运行在它们被定义的作用域里,而丌是它们被执行的作用域里



思考:
var name = 'blankyao';
function echo() {
    alert(name);
    var name = '姚东旭';
    alert(name);
}


echo();
几个知识点——作用域链(2)

1. 定义函数echo时,js解释器将作用域链(scope chain)设置为当前echo所在的上下
  文(环境)


2. 执行函数echo的时候,进入执行环境(excution context)


3. 执行环境创建一个调用对象(call object)(丌具有原型的内部对象,丌能直接访问
  ),然后将该活劢对象添加到作用域链的最顶端


4. 添加函数echo的命名参数到调用对象


5. 定义var语句定义的局部变量
几个知识点——闭包(1)

闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因
 而这些变量也是该表达式的一部分




说白了,




JavaScript中所有的
 function都是一个闭包
几个知识点——闭包(2)

基础应用:
 防止污染全局变量
 在内存中长期维持一个变量
 实现私有属性戒方法(Private Members in JavaScript )



具体应用:
 curry memoization
注意:
IE内存泄漏 http://msdn.microsoft.com/en-
 us/library/Bb250448
几个知识点——原型(1)


Brendan Eich丌想把javascript设计的过于复杂


当时正是面向对象思想比较流行的时期,设计了简化的面向对象的机制,没有引入类
  的概念,引入了new命令和prototype
几个知识点——原型(2)

可以像模仿其他面向对象语言
比如:




               jQuery
                作者

from http://ejohn.org/blog/simple-class-instantiation/
几个知识点——继承(1)

javascript是基于原型的继承
当获取一个对象的属性时,会遍历prototype链直到找到同名的属性


if (typeof Object.create !== 'function') {
    Object.create = function (o) {
         function F() {}
         F.prototype = o;
         return new F();
    };
}
newObject = Object.create(oldObject);


from http://javascript.crockford.com/prototypal.html
几个知识点——继承(2)

简单强大的继承




               又是他

 From http://ejohn.org/blog/simple-javascript-inheritance/
几种事件处理模型




• PubSub模型
• 统一事件分发
• 自定义事件
几种事件处理模型——PubSub模型




•   分离业务逻辑和UI
•   避免复杂的耦合
•   统一管理事件




示例:example/PubSub/index.html


Dojo 等框架中都有实现
几种事件处理模型——事件分发模型
几种事件处理模型——自定义事件




示例:


1. Tangram的事件中心
2. YUI Custom Event System
异步编程
异步编程

 异步编程的重要性丌言而喻,对于JavaScript来说更是如此。JavaScript并没有
 提供任何能够阻塞代码执行过程的机制,任何一个“耗时”的操作都必须写成异
 步的模式。传统的异步操作会在完成时通过回调函数传回结果,我们可以在回调
 函数中进行下面的工作。


 但这也是造成异步编程十分困难的主要原因。我们一直习惯于“线性”地编写逻
 辑,但是异步操作所带来的大量回调把我们的算法分解地支离破碎。我们丌能用if
 来实现逻辑分支,也丌能用while/for/do来实现循环。更丌提异步操作之间的组
 合、错误处理以及取消操作了。


   ——from : jscex文档 http://www.sndacode.com/projects/jscex/wiki
异步编程——案例(1)(jscex)
异步编程——案例(2)(jQuery deferred)




     http://api.jquery.com/category/deferred-object/
CommonJS介绍




                http://seajs.com/docs/zh-cn/commonjs-modules.html
                  http://www.slideshare.net/dexter_yy/js-
                  6228773
      from http://www.commonjs.org/
未来的javascript




•   ES5
     – 简介
     –    es5-shim
     – es5-compat-table
•   CoffeeScript
未来的javascript——ES5




        更强的Object

        Strict mode

        改进的API扩展
未来的javascript——CoffeeScript

  CoffeeScript is an attempt to expose the good parts of JavaScript in a
  simple way.




    link : http://jashkenas.github.com/coffee-script/
完了
开发工具
开发工具




•   JsLint http://www.jslint.com/
•   jsbeautify http://jsbeautifier.org/
推荐书籍
推荐书籍
推荐资源
推荐资源




•   How Browsers Work: Behind the Scenes of Modern Web Browsers
•   PPK http://www.quirksmode.org/js/contents.html
•   Javascript garden http://bonsaiden.github.com/JavaScript-Garden
•   Scalable JavaScript Application Architecture
    http://www.slideshare.net/nzakas/scalable-javascript-application-
    architecture
•   Updating JavaScript: ES5 http://whereswalden.com/files/mozilla/es5-
    lightning/
参考资料
参考资料

•   Prototype.js YUI jQuery Tangram Qwrap jscex
•   CommonJS seajs Ozjs
•   Decoupling Data and UI: PubSub http://blog.narcvs.com/?p=43
•   从 if else 到 switch case 再到抽象
    http://www.baiduux.com/blog/2010/11/01/from-if-else-to-switch-case-
    then-to-abstraction
•   Javascript – How Prototypal Inheritance really works
    http://blog.vjeux.com/2011/javascript/how-prototypal-inheritance-really-
    works.html
•   JavaScript异步编程的Promise模式
    http://www.infoq.com/cn/news/2011/09/js-promise
•   通用JS时代的模块机制和编译工具 http://www.slideshare.net/dexter_yy/js-
    6228773
没了

Weitere ähnliche Inhalte

Was ist angesagt?

编辑器设计U editor
编辑器设计U editor编辑器设计U editor
编辑器设计U editor
taobao.com
 
Template mb-kao
Template mb-kaoTemplate mb-kao
Template mb-kao
xwcoder
 

Was ist angesagt? (20)

React js
React jsReact js
React js
 
webpack 入門
webpack 入門webpack 入門
webpack 入門
 
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
 
编辑器设计U editor
编辑器设计U editor编辑器设计U editor
编辑器设计U editor
 
Entity Framework實戰
Entity Framework實戰Entity Framework實戰
Entity Framework實戰
 
Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出
 
Template mb-kao
Template mb-kaoTemplate mb-kao
Template mb-kao
 
利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
 
使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式
 
Net 相依性注入 學習筆記 1.0
Net 相依性注入 學習筆記 1.0Net 相依性注入 學習筆記 1.0
Net 相依性注入 學習筆記 1.0
 
Honey's Data Dinner#7 webpack 包達人(入門)
Honey's Data Dinner#7 webpack 包達人(入門)Honey's Data Dinner#7 webpack 包達人(入門)
Honey's Data Dinner#7 webpack 包達人(入門)
 
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
 
Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)
 
Nuget介紹- 如何使用和建立自己的package
Nuget介紹- 如何使用和建立自己的packageNuget介紹- 如何使用和建立自己的package
Nuget介紹- 如何使用和建立自己的package
 
Angular js twmvc#17
Angular js twmvc#17Angular js twmvc#17
Angular js twmvc#17
 
6. 非同步設計
6. 非同步設計6. 非同步設計
6. 非同步設計
 
Blazor 與 Radzen 同行
Blazor 與 Radzen 同行Blazor 與 Radzen 同行
Blazor 與 Radzen 同行
 
Asp.net mvc 概觀介紹
Asp.net mvc 概觀介紹Asp.net mvc 概觀介紹
Asp.net mvc 概觀介紹
 
並行、平行與非同步
並行、平行與非同步並行、平行與非同步
並行、平行與非同步
 

Andere mochten auch (7)

Práctica 1 rae (norma medina)
Práctica 1 rae (norma medina)Práctica 1 rae (norma medina)
Práctica 1 rae (norma medina)
 
TIddlywiki groep 5
TIddlywiki groep 5TIddlywiki groep 5
TIddlywiki groep 5
 
Somma E Differenza
Somma E DifferenzaSomma E Differenza
Somma E Differenza
 
Paa Presentation
Paa PresentationPaa Presentation
Paa Presentation
 
WebResultsIntrotowebmarketing17may2012
WebResultsIntrotowebmarketing17may2012WebResultsIntrotowebmarketing17may2012
WebResultsIntrotowebmarketing17may2012
 
2008 Balkans Peace Park Summer Program Development Projects
2008 Balkans Peace Park Summer Program Development Projects2008 Balkans Peace Park Summer Program Development Projects
2008 Balkans Peace Park Summer Program Development Projects
 
Powerpoint Tiddlywiki
Powerpoint TiddlywikiPowerpoint Tiddlywiki
Powerpoint Tiddlywiki
 

Ähnlich wie Javascript primer plus

美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介
pan weizeng
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
leneli
 
2011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.02011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.0
Anthony Chen
 
Build desktop app_by_xulrunner
Build desktop app_by_xulrunnerBuild desktop app_by_xulrunner
Build desktop app_by_xulrunner
Rack Lin
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
taobao.com
 
July.2011.w3ctech
July.2011.w3ctechJuly.2011.w3ctech
July.2011.w3ctech
Kai Cui
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
yiditushe
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
appollo0312
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
Jackson Tian
 
2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt
tka
 
000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲
ArBing Xie
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoload
jay li
 

Ähnlich wie Javascript primer plus (20)

Kissy design
Kissy designKissy design
Kissy design
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介
 
Js高级技巧
Js高级技巧Js高级技巧
Js高级技巧
 
基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
 
介紹前端 Web 技術在跨平台開發上的應用
介紹前端 Web 技術在跨平台開發上的應用介紹前端 Web 技術在跨平台開發上的應用
介紹前端 Web 技術在跨平台開發上的應用
 
2011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.02011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.0
 
Build desktop app_by_xulrunner
Build desktop app_by_xulrunnerBuild desktop app_by_xulrunner
Build desktop app_by_xulrunner
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
 
July.2011.w3ctech
July.2011.w3ctechJuly.2011.w3ctech
July.2011.w3ctech
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
 
2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt
 
Js培训
Js培训Js培训
Js培训
 
000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲
 
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoload
 
Berserk js
Berserk jsBerserk js
Berserk js
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
 

Javascript primer plus