javascrpt arale

142

Click here to load reader

Upload: alipay

Post on 29-Jan-2018

1.798 views

Category:

Documents


12 download

TRANSCRIPT

Page 1: Javascrpt arale

JavaScript + Arale前端开发部 邵帅

Page 2: Javascrpt arale

主要内容

Page 3: Javascrpt arale

主要内容

web技术及职责

Page 4: Javascrpt arale

主要内容

web技术及职责

JavaScript语言特性

Page 5: Javascrpt arale

主要内容

web技术及职责

JavaScript语言特性

选择器和DOM操作

Page 6: Javascrpt arale

主要内容

web技术及职责

JavaScript语言特性

选择器和DOM操作

Arale框架

Page 7: Javascrpt arale

web技术及职责

Page 8: Javascrpt arale
Page 9: Javascrpt arale
Page 10: Javascrpt arale

元素 职责 MVC

HTML 内容 M

CSS 样式 V

JavaScript 行为 C

Page 11: Javascrpt arale

元素 职责 MVC

HTML 内容 M

CSS 样式 V

JavaScript 行为 C

Page 12: Javascrpt arale

元素 职责 MVC

HTML 内容 M

CSS 样式 V

JavaScript 行为 C

Page 13: Javascrpt arale

主要内容

web技术及职责

JavaScript语言特性

选择器和DOM操作

Arale框架

Page 14: Javascrpt arale

JavaScript语言特性

Page 15: Javascrpt arale

弱类型语言

Page 16: Javascrpt arale

弱类型语言

声明变量时不需要指定类型

Page 17: Javascrpt arale

弱类型语言

声明变量时不需要指定类型

六种数据类型:number, string,

object, boolean, null, undefined

Page 18: Javascrpt arale

弱类型语言

声明变量时不需要指定类型

六种数据类型:number, string,

object, boolean, null, undefined使用前先声明

Page 19: Javascrpt arale
Page 20: Javascrpt arale

number, string, boolean

Number, String, BooleanVS.

Page 21: Javascrpt arale

number, string, boolean

Number, String, BooleanVS.

原始数据类型,按值传递

Page 22: Javascrpt arale

number, string, boolean

Number, String, BooleanVS.

原始数据类型,按值传递

对象,按引用传递

Page 23: Javascrpt arale

number, string, boolean

Number, String, BooleanVS.

undefined

nullVS.

原始数据类型,按值传递

对象,按引用传递

Page 24: Javascrpt arale

number, string, boolean

Number, String, BooleanVS.

undefined

nullVS.

变量被创建后,但未赋值,不应该在程序中传递

原始数据类型,按值传递

对象,按引用传递

Page 25: Javascrpt arale

number, string, boolean

Number, String, BooleanVS.

undefined

nullVS.

变量被创建后,但未赋值,不应该在程序中传递

空值,可以在程序中传递

原始数据类型,按值传递

对象,按引用传递

Page 26: Javascrpt arale

基本类型

Page 27: Javascrpt arale

基本类型没有任何理由去封装基本类型

Page 28: Javascrpt arale

基本类型没有任何理由去封装基本类型

var x = new Boolean(false);if (x) { alert('hi'); // Shows 'hi'.}

Page 29: Javascrpt arale

基本类型没有任何理由去封装基本类型

var x = new Boolean(false);if (x) { alert('hi'); // Shows 'hi'.}

var x = Boolean(0);if (x) { alert('hi'); // This will never be alerted.}typeof Boolean(0) == 'boolean';typeof new Boolean(0) == 'object';

Page 30: Javascrpt arale

作用域

Page 31: Javascrpt arale

作用域function f1(x) { var a = 1; if(x) { var b = 2; } function f2() { var c = 3; } console.log(a); console.log(b); console.log(c);}f1(4);

Page 32: Javascrpt arale

作用域function f1(x) { var a = 1; if(x) { var b = 2; } function f2() { var c = 3; } console.log(a); console.log(b); console.log(c);}f1(4);

12undefined

Page 33: Javascrpt arale

作用域

JavaScript中只有函数作用域

Page 34: Javascrpt arale
Page 35: Javascrpt arale

if (x) {function foo() {}

}

Page 36: Javascrpt arale

if (x) {function foo() {}

}

Page 37: Javascrpt arale

if (x) {function foo() {}

}

if (x) {    var foo = function() {}}

不要在块内声明一个函数

Page 38: Javascrpt arale

expression & literal

Page 39: Javascrpt arale

expression & literalfunction fn() {

console.log(f1); var f1 = function() { console.log("f1") } console.log(f1);

console.log(f2); function f2() { } console.log(f2); var f2 = function() { console.log("f3"); } f2();}fn()

Page 40: Javascrpt arale

expression & literalfunction fn() {

console.log(f1); var f1 = function() { console.log("f1") } console.log(f1);

console.log(f2); function f2() { } console.log(f2); var f2 = function() { console.log("f3"); } f2();}fn()

Page 41: Javascrpt arale

expression & literalfunction fn() {

console.log(f1); var f1 = function() { console.log("f1") } console.log(f1);

console.log(f2); function f2() { } console.log(f2); var f2 = function() { console.log("f3"); } f2();}fn()

打印结果:

nullfunctionfunctionfunctionf3

Page 42: Javascrpt arale

函数是第一型

Page 43: Javascrpt arale

函数是第一型能表达为匿名的直接量

Page 44: Javascrpt arale

函数是第一型能表达为匿名的直接量

能被变量存储

Page 45: Javascrpt arale

函数是第一型能表达为匿名的直接量

能被变量存储

能被其他数据结构存储

Page 46: Javascrpt arale

函数是第一型能表达为匿名的直接量

能被变量存储

能被其他数据结构存储

有独立而确定的名称

Page 47: Javascrpt arale

函数是第一型能表达为匿名的直接量

能被变量存储

能被其他数据结构存储

有独立而确定的名称

可作为函数结果值返回

Page 48: Javascrpt arale

原型

Page 49: Javascrpt arale

原型 对象的构建基于原型prototype

Page 50: Javascrpt arale

原型 对象的构建基于原型prototypefunction Circle(x, y, z) { this.x = x; this.y = y; this.r = r; this.getR = function() { return this.r;};}//instance methodCircle.prototype.area = function() { return this.r * this.r * 3.14159;}var c = new Circle(0, 0, 2);alert(c.area());

Page 51: Javascrpt arale

原型 对象的构建基于原型prototypefunction Circle(x, y, z) { this.x = x; this.y = y; this.r = r; this.getR = function() { return this.r;};}//instance methodCircle.prototype.area = function() { return this.r * this.r * 3.14159;}var c = new Circle(0, 0, 2);alert(c.area());

getR Vs. area

Page 52: Javascrpt arale

原型 对象的构建基于原型prototypefunction Circle(x, y, z) { this.x = x; this.y = y; this.r = r; this.getR = function() { return this.r;};}//instance methodCircle.prototype.area = function() { return this.r * this.r * 3.14159;}var c = new Circle(0, 0, 2);alert(c.area());

//static methodCircle.getClassName = function() { return “Circle”;}

getR Vs. area

Page 53: Javascrpt arale

原型 对象的构建基于原型prototypefunction Circle(x, y, z) { this.x = x; this.y = y; this.r = r; this.getR = function() { return this.r;};}//instance methodCircle.prototype.area = function() { return this.r * this.r * 3.14159;}var c = new Circle(0, 0, 2);alert(c.area());

//static methodCircle.getClassName = function() { return “Circle”;}

getR Vs. area

prototype 对象是个模板,要实例化的对象都以这个模板为基础。

Page 54: Javascrpt arale

继承

Page 55: Javascrpt arale

继承function ClassA(sColor) { this.color = sColor;}

ClassA.prototype.sayColor = function () { alert(this.color);};

function ClassB(sColor, sName) { ClassA.call(this, sColor); this.name = sName;}

ClassB.prototype = new ClassA();

ClassB.prototype.sayName = function () { alert(this.name);};

Page 56: Javascrpt arale

继承function ClassA(sColor) { this.color = sColor;}

ClassA.prototype.sayColor = function () { alert(this.color);};

function ClassB(sColor, sName) { ClassA.call(this, sColor); this.name = sName;}

ClassB.prototype = new ClassA();

ClassB.prototype.sayName = function () { alert(this.name);};

对象冒充

Page 57: Javascrpt arale

继承function ClassA(sColor) { this.color = sColor;}

ClassA.prototype.sayColor = function () { alert(this.color);};

function ClassB(sColor, sName) { ClassA.call(this, sColor); this.name = sName;}

ClassB.prototype = new ClassA();

ClassB.prototype.sayName = function () { alert(this.name);};

对象冒充

原型链

Page 58: Javascrpt arale

继承function ClassA(sColor) { this.color = sColor;}

ClassA.prototype.sayColor = function () { alert(this.color);};

function ClassB(sColor, sName) { ClassA.call(this, sColor); this.name = sName;}

ClassB.prototype = new ClassA();

ClassB.prototype.sayName = function () { alert(this.name);};

对象冒充

原型链

Page 59: Javascrpt arale

继承function ClassA(sColor) { this.color = sColor;}

ClassA.prototype.sayColor = function () { alert(this.color);};

function ClassB(sColor, sName) { ClassA.call(this, sColor); this.name = sName;}

ClassB.prototype = new ClassA();

ClassB.prototype.sayName = function () { alert(this.name);};

对象冒充 原型链+

Page 60: Javascrpt arale

闭包

Page 61: Javascrpt arale

闭包函数式编程:严

格强调无副作用

Page 62: Javascrpt arale

闭包函数式编程:严

格强调无副作用

闭包:给予机会

改变外部环境

(全局变

量,scope chain

Page 63: Javascrpt arale

闭包函数式编程:严

格强调无副作用

闭包:给予机会

改变外部环境

(全局变

量,scope chain

var sMessage = "hello world";function sayHelloWorld() { alert(sMessage);}sayHelloWorld();

Page 64: Javascrpt arale

闭包函数式编程:严

格强调无副作用

闭包:给予机会

改变外部环境

(全局变

量,scope chain

var sMessage = "hello world";function sayHelloWorld() { alert(sMessage);}sayHelloWorld();

var iBaseNum = 10;function addNum(iNum1, iNum2) { function doAdd() { return iNum1 + iNum2 + iBaseNum; } return doAdd();}

Page 65: Javascrpt arale

闭包函数式编程:严

格强调无副作用

闭包:给予机会

改变外部环境

(全局变

量,scope chain

var sMessage = "hello world";function sayHelloWorld() { alert(sMessage);}sayHelloWorld();

var iBaseNum = 10;function addNum(iNum1, iNum2) { function doAdd() { return iNum1 + iNum2 + iBaseNum; } return doAdd();}

简单的说,闭包就是函数可以使用函数之外定义的变量

Page 66: Javascrpt arale

事件驱动的编程模型

Page 67: Javascrpt arale

事件驱动的编程模型

Page 68: Javascrpt arale

事件驱动的编程模型

Page 69: Javascrpt arale

事件驱动的编程模型<button id=”btn” onclick=”alert(‘button clicked!’);”>Click Me!</button>

Page 70: Javascrpt arale

事件驱动的编程模型<button id=”btn” onclick=”alert(‘button clicked!’);”>Click Me!</button>

var btn = document.getElementById(‘btn’);btn.onclick = function() { alert(“button clicked”);}

Page 71: Javascrpt arale

事件驱动的编程模型<button id=”btn” onclick=”alert(‘button clicked!’);”>Click Me!</button>

var btn = document.getElementById(‘btn’);btn.onclick = function() { alert(“button clicked”);}

var btn = document.getElementById(‘btn’);if(window.addEventListener) { btn.addEventListener(‘click’, function() {alert(1);}, false);} else { btn.attachEvent(‘onclick’, function() {alert(1);});}

Page 72: Javascrpt arale

事件驱动的编程模型<button id=”btn” onclick=”alert(‘button clicked!’);”>Click Me!</button>

var btn = document.getElementById(‘btn’);btn.onclick = function() { alert(“button clicked”);}

var btn = document.getElementById(‘btn’);if(window.addEventListener) { btn.addEventListener(‘click’, function() {alert(1);}, false);} else { btn.attachEvent(‘onclick’, function() {alert(1);});}

Page 73: Javascrpt arale

事件类型

Page 74: Javascrpt arale

事件类型click

change

load

mouseover

mouseout

blur

submit

keydown

keypress

resize

scroll

......

Page 75: Javascrpt arale

主要内容

web技术及职责

JavaScript语言特性

选择器和DOM操作

Arale框架

Page 76: Javascrpt arale

选择器和DOM操作

Page 77: Javascrpt arale

DOM

Page 78: Javascrpt arale

DOMDocument Object Model

Page 79: Javascrpt arale

DOMDocument Object ModelHTML和XML文档的编程接口规

范,W3C标准之一

Page 80: Javascrpt arale

DOMDocument Object ModelHTML和XML文档的编程接口规

范,W3C标准之一

通过JS操作DOM对象来达到操作页面

元素的目的

Page 81: Javascrpt arale

DOM manipulation

Page 82: Javascrpt arale

DOM manipulation

创建元素

Page 83: Javascrpt arale

DOM manipulation

创建元素

删除元素

Page 84: Javascrpt arale

DOM manipulation

创建元素

删除元素

获取元素/集合

Page 85: Javascrpt arale

DOM manipulation

创建元素

删除元素

获取元素/集合

访问/修改元素属性

Page 86: Javascrpt arale

DOM操作函数

Page 87: Javascrpt arale

DOM操作函数getElementById

firstChild, lastChild,childNodes

previousSibling, nextSibling, parentNode

getElementsByTagName

appendChild

removeChild

replaceChild

createElement

createTextNode

insertBefore

innerHTML

Page 88: Javascrpt arale

var newP = document.createElement("p");var txt = 'Kilroy was here.';var newT = document.createTextNode(txt);newP.appendChild(newT);var p2 = document.getElementsByTagName('p')[1];p2.parentNode.replaceChild(newP,p2);

Page 89: Javascrpt arale

选择器/selector

Page 90: Javascrpt arale

选择器/selector

css选择器

sizzle引擎

Page 91: Javascrpt arale

主要内容

web技术及职责

JavaScript语言特性

选择器和DOM操作

Arale框架

Page 92: Javascrpt arale
Page 93: Javascrpt arale

Arale框架

Page 94: Javascrpt arale
Page 95: Javascrpt arale

Arale前端解决方案

Page 96: Javascrpt arale

Arale前端解决方案

Arale Js

Page 97: Javascrpt arale

Arale前端解决方案

Arale JsAlice

Page 98: Javascrpt arale

Arale前端解决方案

Arale JsAlice

combo

Page 99: Javascrpt arale

Arale前端解决方案

Arale JsAlice

maven

combo

Page 100: Javascrpt arale

Arale前端解决方案

Arale JsAlice

maven

static servercombo

Page 101: Javascrpt arale

Arale前端解决方案

Arale JsAlice

maven

static servercombo

前端服务化

Page 102: Javascrpt arale
Page 103: Javascrpt arale

Hello World!

Page 104: Javascrpt arale

Hello World!

$E.domReady(function(){ $("btn").click(function(e){ alert("Hello Arale!"); });});

Page 105: Javascrpt arale

Selector

Page 106: Javascrpt arale

Selector

id选择器: $(‘id’)

Page 107: Javascrpt arale

Selector

id选择器: $(‘id’)

返回Node类型

Page 108: Javascrpt arale

Selector

id选择器: $(‘id’)

复杂选择器:$$(selector)

返回Node类型

Page 109: Javascrpt arale

Selector

id选择器: $(‘id’)

复杂选择器:$$(selector)

返回Node类型

返回数组,数组中的节点为Node类型

Page 110: Javascrpt arale

Dom & Node

$D ——静态方法集合

$Node——封装对象,使获得实例方法

Page 111: Javascrpt arale

Dom & Node

$D ——静态方法集合

$Node——封装对象,使获得实例方法Dom常用方法

toDomgetPosition

setStylegetDocumentWidth

getDocumentHeightgetViewportWidth

getViewportHeight

Page 112: Javascrpt arale

Dom & Node

$D ——静态方法集合

$Node——封装对象,使获得实例方法Node常用方法

addClassremoveClassattrinjectgetStylesetStylenextpreviousparentquery

Dom常用方法

toDomgetPosition

setStylegetDocumentWidth

getDocumentHeightgetViewportWidth

getViewportHeight

Page 113: Javascrpt arale

Event——$E

Page 114: Javascrpt arale

Event——$E

$E.domReady(function() {//do something

});

Page 115: Javascrpt arale

Event——$E 常用方法

connectdisconnect

subscribeunsubscribe

publishtrigger

delegatelive

$E.domReady(function() {//do something

});

Page 116: Javascrpt arale

Event——$E 常用方法

connectdisconnect

subscribeunsubscribe

publishtrigger

delegatelive

$E.domReady(function() {//do something

});

事件代理机制

Page 117: Javascrpt arale

数组——$A

Page 118: Javascrpt arale

数组——$A$A([1,2,3,4,5]).each(function(v, i) {

console.log(v);});

Page 119: Javascrpt arale

数组——$A$A([1,2,3,4,5]).each(function(v, i) {

console.log(v);});

map & reduce

Page 120: Javascrpt arale

数组——$A$A([1,2,3,4,5]).each(function(v, i) {

console.log(v);});

eacheverysomemap

filter

map & reduce

Page 121: Javascrpt arale

数组——$A$A([1,2,3,4,5]).each(function(v, i) {

console.log(v);});

eacheverysomemap

filter

map & reduce Others:cleanremovecombineeraseincludelast...

Page 122: Javascrpt arale
Page 123: Javascrpt arale

颗粒化模块设计

Page 124: Javascrpt arale

颗粒化模块设计 combo服务

Page 125: Javascrpt arale

颗粒化模块设计 combo服务

Page 126: Javascrpt arale

颗粒化模块设计 combo服务

Loader.use(‘arale.http’, function() { $Ajax.get(‘url’, { success: function() { } });

});

Page 127: Javascrpt arale

A B

C

Loader.use(‘C’, function() {//some code here

})

加载C模块js文件的同时,若

A和B还没有加载会同时加

载。

Page 128: Javascrpt arale

颗粒化模块设计

A B

C

Loader.use(‘C’, function() {//some code here

})

加载C模块js文件的同时,若

A和B还没有加载会同时加

载。

Page 129: Javascrpt arale
Page 130: Javascrpt arale

代码检查

Page 131: Javascrpt arale

压缩代码检查

Page 132: Javascrpt arale

压缩

硬编码检测

代码检查

Page 133: Javascrpt arale

压缩

硬编码检测测试

代码检查

Page 134: Javascrpt arale

压缩

硬编码检测测试

依赖关系计算

代码检查

Page 135: Javascrpt arale

压缩

硬编码检测测试

依赖关系计算部署

代码检查

Page 136: Javascrpt arale

压缩

硬编码检测测试

生成文档

依赖关系计算部署

代码检查

Page 137: Javascrpt arale

压缩

硬编码检测测试

生成文档

依赖关系计算部署

代码检查

Maven

Page 138: Javascrpt arale

项目生命周期管理

压缩

硬编码检测测试

生成文档

依赖关系计算部署

代码检查

Maven

Page 140: Javascrpt arale

自己用JS实现一个快速排序算法,不可

以用Array#sort方法

事件委托(delegate)的原理描述,自写或

使用Arale做一个小demo

task

Page 141: Javascrpt arale

Q & A

Page 142: Javascrpt arale

Thanks!