203
v©¢¤¬

第三课:JS-行为控制语言+js架构思想

Embed Size (px)

DESCRIPTION

百度web前端课程之js

Citation preview

Page 1: 第三课:JS-行为控制语言+js架构思想

�������v�©�¢¤¬�

Page 2: 第三课:JS-行为控制语言+js架构思想

berg

��v�©�¢¤¬�

Page 3: 第三课:JS-行为控制语言+js架构思想

!!"#$%&'$()(*+*,#-*".)/,0#)121,30%.)4,#55*".)678)/,9:$90;

!<03$5)=/+/01"3-%>?@@>68AB>C6C>B3$9D>A/1>3E@;

!B3+*)3$)F*3G3$5.)H#"IJF/3(9; berg

!"##$%$%&'&ó\¼

��v�©�¢¤¬�

Page 4: 第三课:JS-行为控制语言+js架构思想

'&:/3,K),*3LM3D3$5J4/3(9;1#:

8H3%%*"K)J1$4*"5

N*34#K)J4*"5

F,#5K)M%%-K>>HHH;1$4*"5;1#:

?#$%/1%):*

��v�©�¢¤¬�

Page 5: 第三课:JS-行为控制语言+js架构思想

8M30)/O%*"$##$

!=/+/01"3-%)4/031P)QR;SMT

!8M*)(*035$)U)/"1M3%*1%9"*)#O)8/$5"/:QV;SMT

��v�©�¢¤¬�

Page 6: 第三课:JS-行为控制语言+js架构思想

Javascript

Javascript basic+��v�©�¢¤¬�

Page 7: 第三课:JS-行为控制语言+js架构思想

E9%,3$*

!E+*"+3*H

!=/+/01"3-%)O#")H*4)4"#H0*"

!=/+/01"3-%

!?,3*$%&@3(*)=/+/@1"3-%

!W(+/$1*()01"3-%3$5

��v�©�¢¤¬�

Page 8: 第三课:JS-行为控制语言+js架构思想

Overview��v�©�¢¤¬�

Page 9: 第三课:JS-行为控制语言+js架构思想

NM2)=/+/01"3-%)X

��v�©�¢¤¬�

Page 10: 第三课:JS-行为控制语言+js架构思想

B/$59/5*)#O)%M*)N*4O#":)VYYZ;R

��v�©�¢¤¬�

Page 11: 第三课:JS-行为控制语言+js架构思想

��v�©�¢¤¬�

Page 12: 第三课:JS-行为控制语言+js架构思想

()*+,&-./)&00123&4*5$66&7&85&*9)9:+//

��v�©�¢¤¬�

Page 13: 第三课:JS-行为控制语言+js架构思想

=/+/@1"3-%)30)"*/,,2)5##(7%)30),35M%H*35M%)/$()*D-"*003+*

��v�©�¢¤¬�

Page 14: 第三课:JS-行为控制语言+js架构思想

!C"#%#%2-/,)EEC

!!9$1%3#$/,)

![2$/:31

��v�©�¢¤¬�

Page 15: 第三课:JS-行为控制语言+js架构思想

F9%)%M*)*$+3"#$:*$%)30)$#%)0#)5##(

A/I*)90)1#$O90*()/$()/$5"2

��v�©�¢¤¬�

Page 16: 第三课:JS-行为控制语言+js架构思想

!7')Q)\)+*"03#$0T.)]"*O#D.)1M"#:*.)0/O/"3.)#-*"/

!?M3$/

!^ZS

!A/D%M#$

A/$2)4"#H0*"0

��v�©�¢¤¬�

Page 17: 第三课:JS-行为控制语言+js架构思想

��v�©�¢¤¬�

Page 18: 第三课:JS-行为控制语言+js架构思想

!=/+/01"3-%)*$53$*0

!?M/I"/)&)7'

!=_5*"A#$I*2)&)!3"*O#D

!`a)&)?M"#:*

!?/"/I/$)&)E-*"/)

!b3%"#)&)0/O/"3

[3c*"*$%)3:-,*:*$%

��v�©�¢¤¬�

Page 19: 第三课:JS-行为控制语言+js架构思想

[3c*"*$%)3:-,*:*$%

!N*4)4"#H0*")*$53$*0

!8"3(*$%)&)7'

!d*1I#)&)!3"*O#D

!N*4I3%)&)?M"#:*)U)@/O/"3

!C"*0%#)&)E-*"/)

��v�©�¢¤¬�

Page 20: 第三课:JS-行为控制语言+js架构思想

Javascript��v�©�¢¤¬�

Page 21: 第三课:JS-行为控制语言+js架构思想

9 function hello(to){ 10 to = to || 'world'; 11 alert("Hello " + to); 12 return true; 13 } 14 var to = 'everyone'; 15 hello(to);

��v�©�¢¤¬�

Page 22: 第三课:JS-行为控制语言+js架构思想

!B*D31/,)@%"91%9"*

![/%/%2-*)/$()`/,9*0

!`/"3/4,*0

!'D-"*003#$0)/$()E-*"/%#"0

!@%/%*:*$%0

!;;;

��v�©�¢¤¬�

Page 23: 第三课:JS-行为控制语言+js架构思想

!@#:*)(3c*"*$1*

!E4G*1%

!!9$1%3#$

!C"#%#%2-*)EEC

E9%,3$*

��v�©�¢¤¬�

Page 24: 第三课:JS-行为控制语言+js架构思想

@#:*)(3c*"*$1*0

��v�©�¢¤¬�

Page 25: 第三课:JS-行为控制语言+js架构思想

`/"3/4,*0<$%2-*(

��v�©�¢¤¬�

Page 26: 第三课:JS-行为控制语言+js架构思想

43 var i = 1; 44 i = 'something else'; 45 46 alert(i + 1);

��v�©�¢¤¬�

Page 27: 第三课:JS-行为控制语言+js架构思想

49 var a = [1, 2, 3]; 50 var b = a; 51 a[0] = 99; 52 alert(b);

��v�©�¢¤¬�

Page 28: 第三课:JS-行为控制语言+js架构思想

!C"3:3%3+*)%2-*0)

!b9:4*"0

!F##,*/$

!@%"3$5

!$9,,

!9$(*]$*(

!e*O*"*$1*)%2-*0

!E4G*1%0

!W""/20

!!9$1%3#$0

��v�©�¢¤¬�

Page 29: 第三课:JS-行为控制语言+js架构思想

`/"3/4,*)@1#-*b#)4,#1I)01#-*

��v�©�¢¤¬�

Page 30: 第三课:JS-行为控制语言+js架构思想

22 scope = 'global'; 23 function checkscope() { 24 scope = 'local'; 25 alert(scope); 26 myscope = 'local'; 27 alert(myscope); 28 } 29 checkscope(); 30 alert(scope); 31 alert(myscope);

��v�©�¢¤¬�

Page 31: 第三课:JS-行为控制语言+js架构思想

34 function f() { 35 alert(scope); 36 if (!scope) { 37 var scope = 'local'; 38 } 39 alert(scope); 40 } 41 f();

��v�©�¢¤¬�

Page 32: 第三课:JS-行为控制语言+js架构思想

E-%3#$/,)@*:31#,#$0[E)bE8)O#"5*%)2#9")@*:31#,#$0

��v�©�¢¤¬�

Page 33: 第三课:JS-行为控制语言+js架构思想

54 var a = 1; 55 alert(a); 56 57 return 58 { 59 a: 1 60 };

��v�©�¢¤¬�

Page 34: 第三课:JS-行为控制语言+js架构思想

@9::/"3L*

!<$%2-*()`/"3/4,*0

!`/"3/4,*)@1#-*

!E-%3#$/,)@*:31#,#$0{��v�©�¢¤¬�

Page 35: 第三课:JS-行为控制语言+js架构思想

E4G*1%

��v�©�¢¤¬�

Page 36: 第三课:JS-行为控制语言+js架构思想

! W""/20

! !9$1%3#$0

! e*59,/")*D-"*003#$0

! E4G*1%

! b9:4*"0

! @%"3$50

! F##,*/$

} Object

Object-like}��v�©�¢¤¬�

Page 37: 第三课:JS-行为控制语言+js架构思想

?,/00&O"**

62 var info = { 63 first: 'Berg', 64 last: 'Lei', 65 address: { 66 city: 'Beijing', 67 street: 'Shangdi 10th street' 68 } 69 };

��v�©�¢¤¬�

Page 38: 第三课:JS-行为控制语言+js架构思想

71 info['first']; 72 info.first; 73 74 var key = 'first'; 75 info[key];

��v�©�¢¤¬�

Page 39: 第三课:JS-行为控制语言+js架构思想

77 for (i in info) { 78 alert(info[i]); 79 }

��v�©�¢¤¬�

Page 40: 第三课:JS-行为控制语言+js架构思想

C"#%#%2-*

82 function clone(o) { 83 var F = function() {}; 84 F.prototype = o; 85 return new F(); 86 }

��v�©�¢¤¬�

Page 41: 第三课:JS-行为控制语言+js架构思想

89 var student = { 90 university: 'CAS' 91 }; 92 var someone = clone(student); 93 94 alert(someone['university']); 95 96 someone['name'] = 'john'; 97 student['university'] = 'HIT'; 98 99 alert(someone['university']);

��v�©�¢¤¬�

Page 42: 第三课:JS-行为控制语言+js架构思想

someone

name : john

student

university: CAS

Object

toString : fn

someone['key']

null

C"#%#%2-*)1M/3$

��v�©�¢¤¬�

Page 43: 第三课:JS-行为控制语言+js架构思想

@9::/"3L*

!?,/00&O"**

!C"#%#%2-*

!C"#%#%2-*)1M/3${��v�©�¢¤¬�

Page 44: 第三课:JS-行为控制语言+js架构思想

!9$1%3#$

��v�©�¢¤¬�

Page 45: 第三课:JS-行为控制语言+js架构思想

7$+#1/%3#$0

��v�©�¢¤¬�

Page 46: 第三课:JS-行为控制语言+js架构思想

!9$1%3#$)3$+#1/%3#$

103 function add(a, b) {104 return a + b;105 }106 add();

��v�©�¢¤¬�

Page 47: 第三课:JS-行为控制语言+js架构思想

A*%M#()3$+#1/%3#$108 var counter = {109 value: 0,110 increment: function(count) {111 return this.value += count || 1;112 }113 };114 alert(counter.increment());

��v�©�¢¤¬�

Page 48: 第三课:JS-行为控制语言+js架构思想

NM/%f0)g%M30g

��v�©�¢¤¬�

Page 49: 第三课:JS-行为控制语言+js架构思想

g%M30g)/,H/20)"*O*"0)%#)%M*)#H$*")#4G*1%)#O)%M*)O9$1%3#$)

��v�©�¢¤¬�

Page 50: 第三课:JS-行为控制语言+js架构思想

W--,2)3$+#1/%3#$118 function sum() {119 var i, len = arguments.length, sum = 0;120 for (i = 0; i < len; i++) {121 sum += arguments[i];122 }123 return sum;124 }125 126 127 var arr = [1, 2, 3, 5];128 sum.apply(this, arr);

��v�©�¢¤¬�

Page 51: 第三课:JS-行为控制语言+js架构思想

!O9$1%3#$;/--,2Q!"#$%&'.)()*$Th

!!"#$%&')K)3$+#I*0)%M*)O9$1%3#$)/0)3O)3%)H*"*)/):*%M#()#O)!"#$%&'

!()*$)K)-/003$5)3%)%M*)/"59:*$%0)1#$%/3$*()3$)%M*)()*$)/""/2

!O9$1%3#$;1/,,Q!"#$%&'.)()*+,---T

��v�©�¢¤¬�

Page 52: 第三课:JS-行为控制语言+js架构思想

?#$0%"91%#")3$+#1/%3#$

return a new object link to the function's prototype member

132 var Counter = function(init) {133 this.value = init || 0;134 };135 var myCounter = new Counter(5);

��v�©�¢¤¬�

Page 53: 第三课:JS-行为控制语言+js架构思想

?,#09"*

��v�©�¢¤¬�

Page 54: 第三课:JS-行为控制语言+js架构思想

var Counter = function() { var value = 0;

return { increment: function(inc) { return value += inc || 1; }, getValue: function() { return value; } };}();

��v�©�¢¤¬�

Page 55: 第三课:JS-行为控制语言+js架构思想

!9$1%3#$)1/$)/11*00)%#)%M*)1#$%*D%)3$)HM31M)3%)H/0)1"*/%*().)'+*$)%M#95M)%M30)O9$1%3#$)M/0)(+),(-./),!0)1,-;)

?,#09"*

��v�©�¢¤¬�

Page 56: 第三课:JS-行为控制语言+js架构思想

for (var i = 0; i < count; i++) { nodes[i].onclick = function() { alert(i); };}

��v�©�¢¤¬�

Page 57: 第三课:JS-行为控制语言+js架构思想

for (var i = 0; i < count; i++) { nodes[i].onclick = function(i) { return function() { alert(i); }; }(i);}

��v�©�¢¤¬�

Page 58: 第三课:JS-行为控制语言+js架构思想

173 function multize(func) {174 return function() {175 var list = arguments[0],176 ret = [],177 more = [].slice.call(arguments, 0);178 179 for (i = 0; i < list.length; i++) {180 more[0] = list[i];181 ret.push(func.apply(this, more));182 }183 return ret;184 }185 }

!9$1%3#$/,)-"#5"/::3$5

��v�©�¢¤¬�

Page 59: 第三课:JS-行为控制语言+js架构思想

187 function inc(value) {188 return value + 1;189 }190 var multInc = multize(inc);191 192 multInc([1, 2, 3]);

��v�©�¢¤¬�

Page 61: 第三课:JS-行为控制语言+js架构思想

195 function fibonacci(n) {196 return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);197 }198 199 for (var i = 0; i <= 10; i++) {200 document.write(i + ': ' + fibonacci(i) + '<br />');201 }

A*:#3L/%3#$

��v�©�¢¤¬�

Page 62: 第三课:JS-行为控制语言+js架构思想

203 var i = 1,204 startTime = (new Date()).getTime();205 while (i++) {206 fibonacci(i);207 208 if ((new Date()).getTime() - startTime > 1000) {209 alert(i);210 break;211 }212 }

��v�©�¢¤¬�

Page 63: 第三课:JS-行为控制语言+js架构思想

214 var fibonacci = function() {215 var cache = [0, 1];216 217 var _fib = function(n) {218 var result = cache[n];219 if (typeof result == 'undefined') {220 result = _fib(n-1) + _fib(n-2);221 cache[n] = result;222 }223 return result;224 };225 return _fib;226 }();

��v�©�¢¤¬�

Page 64: 第三课:JS-行为控制语言+js架构思想

?/01/(*

231 T.e('#header').232 children().233 on('click', function() {234 alert('clicked');235 });

��v�©�¢¤¬�

Page 65: 第三课:JS-行为控制语言+js架构思想

A/I3$5)[@BQ[#:/3$)0-*13]1),/$59/5*0T

��v�©�¢¤¬�

Page 66: 第三课:JS-行为控制语言+js架构思想

@9::/"3L*

!7$+#1/%3#$0

!!9$1%3#$

!A*%M#(

!1#$0%"91%#"

!/--,2{

��v�©�¢¤¬�

Page 67: 第三课:JS-行为控制语言+js架构思想

@9::/"3L*

!?,#09"*

!!9$1%3#$/,)-"#5"/::3$5

!A*:#3L/%3#$

!?/01/(*{

��v�©�¢¤¬�

Page 68: 第三课:JS-行为控制语言+js架构思想

C"#%#%2-/,)EEC

��v�©�¢¤¬�

Page 69: 第三课:JS-行为控制语言+js架构思想

?,/0031)-/%%*"$H3%M

-"#%#%2-/,)-/%%*"$

��v�©�¢¤¬�

Page 70: 第三课:JS-行为控制语言+js架构思想

C0*9(#1,/0031/,

��v�©�¢¤¬�

Page 71: 第三课:JS-行为控制语言+js架构思想

return a new object link to the function's prototype member

132 var Counter = function(init) {133 this.value = init || 0;134 };135 var myCounter = new Counter(5);

��v�©�¢¤¬�

Page 72: 第三课:JS-行为控制语言+js架构思想

243 var Person = function(name) {244 this.name = name;245 };246 Person.prototype.getName = function() {247 return this.name;248 };

��v�©�¢¤¬�

Page 73: 第三课:JS-行为控制语言+js架构思想

243 var Person = function(name) {244 this.name = name;245 };246 Person.prototype.getName = function() {247 return this.name;248 };

250 var Student = function(name, university) {251 this.name = name;252 this.university = university;253 };254 extend(Student, Person);255 Student.prototype.getUniversity = function() {256 return this.university;257 };

��v�©�¢¤¬�

Page 74: 第三课:JS-行为控制语言+js架构思想

238 function extend(subClass, superClass) {239 var F = function() {};240 F.prototype = superClass.prototype;241 subClass.prototype = new F();242 }

��v�©�¢¤¬�

Page 75: 第三课:JS-行为控制语言+js架构思想

W)4*%%*")g*D%*$(g

��v�©�¢¤¬�

Page 76: 第三课:JS-行为控制语言+js架构思想

266 function extend(subClass, superClass) {267 var F = function() {};268 F.prototype = superClass.prototype;269 subClass.prototype = new F();270 subClass.prototype.constructor = subClass;271 subClass.superClass = superClass.prototype;272 if (superClass.prototype.constructor != Object.prototype.constructor) {273 superClass.prototype.constructor = superClass;274 }275 }276 277 var Student = function(name, university) {278 Student.superClass.constructor.call(this, name);279 this.university = university;280 };

��v�©�¢¤¬�

Page 77: 第三课:JS-行为控制语言+js架构思想

C"#%#%2-/,)-/%%*"$

��v�©�¢¤¬�

Page 78: 第三课:JS-行为控制语言+js架构思想

285 var Person = {286 name: 'unnamed',287 getName: function() {288 return this.name;289 }290 };291 ...298 var student = clone(Person);299 student.name = 'John';300 student.study = function() {301 alert("I'm studying.");302 };303 alert(student.name);304 student.name = 'Tom';305 alert(student.name);

��v�©�¢¤¬�

Page 79: 第三课:JS-行为控制语言+js架构思想

82 function clone(o) { 83 var F = function() {}; 84 F.prototype = o; 85 return new F(); 86 }

��v�©�¢¤¬�

Page 80: 第三课:JS-行为控制语言+js架构思想

?,/0031/,)3$M*"3%/$1*

!?"*/%3$5)/$)WC7)O#")H3(*0-"*/()90*;

!E%M*")-"#5"/::*"0)$#%)O/:3,3/")H3%M)-"#%#%2-/,)3$M*"3%/$1*;

!b#%):*:#"2&*i13*$%;

��v�©�¢¤¬�

Page 81: 第三课:JS-行为控制语言+js架构思想

C"#%#%2-/,)3$M*"3%/$1*

!`*"2):*:#"2&*i13*$%;

!7%0)-#H*"),3*0)3$)3%0)03:-,313%2;

!63(3$5)%M30)O/1%)(#*0):#"*)M/":)%M/$)5##(;

��v�©�¢¤¬�

Page 82: 第三课:JS-行为控制语言+js架构思想

@9::/"3L*

��v�©�¢¤¬�

Page 83: 第三课:JS-行为控制语言+js架构思想

!=/+/01"3-%)30)"*/,,2)5##()/$()3:-#"%/$%

!6/+*)035$3]1/$%)(3c*"*$1*0)O"#:)%M*)@EA')E86'e)BWbd<Wd'

![2$/:31

!C"#%#%2-/,)EEC

!!9$1%3#$/,

!!9$1%3#$0)/"*)]"0%)1,/00)#4G*1%0)

��v�©�¢¤¬�

Page 84: 第三课:JS-行为控制语言+js架构思想

QA��v�©�¢¤¬�

Page 85: 第三课:JS-行为控制语言+js架构思想

Client-Side JavaScript

��v�©�¢¤¬�

Page 86: 第三课:JS-行为控制语言+js架构思想

'D/:-,*0)2#9f+*)0**$)0#)O/".M/+*)$#)-/"%319,/")1#$%*D%

��v�©�¢¤¬�

Page 87: 第三课:JS-行为控制语言+js架构思想

��v�©�¢¤¬�

Page 88: 第三课:JS-行为控制语言+js架构思想

!N*4)F"#H0*")'$+3"#$:*$%

!',*:*$%0

!?/01/(3$5)@%2,*)@M**%0

!'+*$%0

!E%M*")O*/%9"*0

E9%,3$*

��v�©�¢¤¬�

Page 89: 第三课:JS-行为控制语言+js架构思想

N*4)F"#H0*")'$+3"#$:*$%

��v�©�¢¤¬�

Page 90: 第三课:JS-行为控制语言+js架构思想

N3$(#H)/0)d,#4/,)'D*19%3#$)?#$%*D%

309 var answer = 42;310 alert(window.answer === answer);

��v�©�¢¤¬�

Page 91: 第三课:JS-行为控制语言+js架构思想

8M*19""*$%H3$(#H

(#19:*$%

M30%#"2

O"/:*0jk

,#1/%3#$

;;;

N3$(#H)E4G*1%0

01"**$

O#":0jk

/$1M#"0jk

3:/5*0jk

;;;

��v�©�¢¤¬�

Page 92: 第三课:JS-行为控制语言+js架构思想

'+*$%)("3+*$O#":)d<7

��v�©�¢¤¬�

Page 93: 第三课:JS-行为控制语言+js架构思想

=/+/@1"3-%)/((0)&,"(2#3))%#)%M*)1#$%*$%)/$()3%0)-"*0*$%/%3#$

��v�©�¢¤¬�

Page 94: 第三课:JS-行为控制语言+js架构思想

!?"*/%3$5)+309/,)*c*1%0)

!@#"%3$5)%M*)1#,9:$0)#O)/)%/4,*)

!63(3$5)1*"%/3$)1#$%*$%)/$()"*+*/,3$5)(*%/3,0)0*,*1%3+*,2)/0)%M*)90*")g("3,,0)(#H$g)3$%#)%M/%)1#$%*$%

!@%"*/:,3$3$5)%M*)4"#H03$5)*D-*"3*$1*)42)1#::9$31/%3$5)(3"*1%,2)H3%M)/)H*4)0*"+*"

��v�©�¢¤¬�

Page 95: 第三课:JS-行为控制语言+js架构思想

',*:*$%

��v�©�¢¤¬�

Page 96: 第三课:JS-行为控制语言+js架构思想

1 <html> 2 <head> 3 <title>Sample Document</title> 4 </head> 5 <body> 6 <h1></h1> 7 <p>This is a <i>simple</i> document. 8 </body> 9 </html>

��v�©�¢¤¬�

Page 97: 第三课:JS-行为控制语言+js架构思想

[EA)%"**Document

<html>

<head> <body>

<title>

"Sample Document"

<h1> <p>

"Title" "This is a " <i>

simple

document

��v�©�¢¤¬�

Page 98: 第三课:JS-行为控制语言+js架构思想

8"/+*"03$5)',*:*$%0

��v�©�¢¤¬�

Page 99: 第三课:JS-行为控制语言+js架构思想

314 function countNode(node) {315 var numtags = 0;316 if (node.nodeType == 1 /*Node.ELEMENT_NODE*/)317 numtags++;318 var children = node.childNodes;319 for (var i = 0; i < children.length; i++) {320 numtags += countNode(children[i]);321 }322 return numtags;323 }324 alert(countNode(document.body));

��v�©�¢¤¬�

Page 100: 第三课:JS-行为控制语言+js架构思想

!$#(*;$#(*82-*

!$#(*;1M3,(b#(*0

![2$/:31)/""/2

!$#(*;%/5b/:*

!$#(*;3$$*"68AB

!$#(*;-/"*$%b#(*

��v�©�¢¤¬�

Page 101: 第三课:JS-行为控制语言+js架构思想

!3$(3$5)',*:*$%0

��v�©�¢¤¬�

Page 102: 第三课:JS-行为控制语言+js架构思想

16 <ul id="my-ul">17 <li>line1</li>18 <li>line2</li>19 <li>line3</li>20 <li>line4</li>21 </ul>

327 var myElement = document.getElementById('my-id');328 329 var myList = document.getElementById('my-ul');330 var myListItem = myList.getElementsByTagName('LI');331 for (var i = 0; i < myListItem.length; i++) {332 alert(myListItem[i].innerHTML);333 }

��v�©�¢¤¬�

Page 103: 第三课:JS-行为控制语言+js架构思想

!,+,4,1!55*%',*:*$%F27(Q#-6!)#1*T

!,+,4,1!55*%',*:*$%0F28/5b/:*Q!(*7(4,T/

!,+,4,1!55*%',*:*$%0F2b/:*Q1(4,6!)#1*T

��v�©�¢¤¬�

Page 104: 第三课:JS-行为控制语言+js架构思想

A#(3O2)',*:*$%0

��v�©�¢¤¬�

Page 105: 第三课:JS-行为控制语言+js架构思想

337 function sortChildren(e) {338 var children = [];339 for (var x = e.firstChild; x != null; x = x.nextSibling) {340 if (x.nodeType == 1 /* Node.ELEMENT_NODE */) {341 children.push(x);342 }343 }344 345 children.sort(function(n, m) {346 var s = n.firstChild.data;347 var t = m.firstChild.data;348 if (s < t) return -1;349 else if (s > t) return 1;350 else return 0;351 });352 for (var i = 0; i < children.length; i++) {353 e.appendChild(children[i]);354 }355 }356 sortChildren(document.getElementById('my-ul'));

��v�©�¢¤¬�

Page 106: 第三课:JS-行为控制语言+js架构思想

359 var iNode = document.getElementsByTagName('i');360 for (var i = 0; i < iNode.length; i++) {361 var b = document.createElement('input');362 var html = iNode[i].innerHTML;363 b.type = 'button';364 iNode[i].appendChild(b);365 b.value = html;366 b.setAttribute('disabled', 'disabled');367 }

��v�©�¢¤¬�

Page 107: 第三课:JS-行为控制语言+js架构思想

!,+,4,1!5/--*$(?M3,(Q,+,T

!-3804,1!51"*/%*',*:*$%Q!(*7(4,T/

!,+,4,1!50*%W%%"349%*Q(!!)9/2(+0,T

��v�©�¢¤¬�

Page 108: 第三课:JS-行为控制语言+js架构思想

?/01/(3$5)@%2,*)@M**%0

��v�©�¢¤¬�

Page 109: 第三课:JS-行为控制语言+js架构思想

370 var nodes = document.getElementsByTagName('p');371 for (var i = 0; i < nodes.length; i++) {372 nodes[i].style.display = 'none';373 }

��v�©�¢¤¬�

Page 110: 第三课:JS-行为控制语言+js架构思想

!7$)?@@K

!:/"53$&,*O%K)V-D

!7$)=/+/01"3-%

!*,*:*$%;0%2,*;:/"53$B*O%)l)gV-Dgh

��v�©�¢¤¬�

Page 111: 第三课:JS-行为控制语言+js架构思想

24 .dark{25 color: #333;26 }27 .highlight{28 color: red;29 }

376 node.className = 'dark';

��v�©�¢¤¬�

Page 112: 第三课:JS-行为控制语言+js架构思想

@9::/"3L*

![EA)%"**

!8"/+*"03$5)',*:*$%0

!!3$(3$5)',*:*$%0

!A#(3O2)',*:*$%0

!?/01/(3$5)@%2,*)@M**%0

��v�©�¢¤¬�

Page 113: 第三课:JS-行为控制语言+js架构思想

'+*$%

��v�©�¢¤¬�

Page 114: 第三课:JS-行为控制语言+js架构思想

'+*$%)%2-*!A#90*)'+*$%

!1,31I>:#90*(#H$);;;

!I*24#/"()'+*$%

!I*2(#H$>I*29-);;;

!C/5*>',*:*$%)'+*$%

! ,#/(>9$,#/();;;

!#$4,9">#$094:3%);;;

��v�©�¢¤¬�

Page 115: 第三课:JS-行为控制语言+js架构思想

'+*$%)6/$(,3$5

��v�©�¢¤¬�

Page 116: 第三课:JS-行为控制语言+js架构思想

W0)C"#-*"%3*032 <input type="button" onclick="toggleHighlight(this)" value="click me!"/>

378 function toggleHighlight(element) {379 if (element.className == 'highlight') {380 element.className = 'dark';381 }else {382 element.className = 'highlight';383 }384 }

��v�©�¢¤¬�

Page 117: 第三课:JS-行为控制语言+js架构思想

W0)W%%"349%*0

387 document.body.onclick = function(e) {388 e = window.event || e;389 toggleHighlight(e.target || e.srcElement);390 };

��v�©�¢¤¬�

Page 118: 第三课:JS-行为控制语言+js架构思想

e*530%"/%3#$393 function bindEvent(element, type, listener) {394 if (element.addEventListener) {395 element.addEventListener(type, listener, false);396 } else if (element.attachEvent) {397 element.attachEvent('on' + type, listener);398 }399 }400 401 bindEvent(document.body, 'click', function(e) {402 e = window.event || e;403 toggleHighlight(e.target || e.srcElement);404 });

��v�©�¢¤¬�

Page 119: 第三课:JS-行为控制语言+js架构思想

'+*$%)C"#-/5/%3#$

��v�©�¢¤¬�

Page 120: 第三课:JS-行为控制语言+js架构思想

408 bindEvent(document.body, 'click', function(e) {409 e = window.event || e;410 toggleHighlight(e.target || e.srcElement);411 });412 413 bindEvent(document.getElementById('my-id'), 'click', function(e) {414 e = window.event || e;415 stopPropagation(e);416 });417 418 419 stopPropagation = function(event) {420 if (event.stopPropagation) {421 event.stopPropagation();422 } else {423 event.cancelBubble = true;424 }425 };

��v�©�¢¤¬�

Page 121: 第三课:JS-行为控制语言+js架构思想

E%M*")O*/%9"*0

��v�©�¢¤¬�

Page 122: 第三课:JS-行为控制语言+js架构思想

83:*"

��v�©�¢¤¬�

Page 123: 第三课:JS-行为控制语言+js架构思想

431 setTimeout(function() {432 alert(1);433 }, 1000);434 435 var count = 1;436 var timer = setInterval(function() {437 if (count == 10) {438 clearTimeout(timer);439 }440 document.body.innerHTML += 'Adding<br />';441 count++;442 443 }, 1000);

��v�©�¢¤¬�

Page 124: 第三课:JS-行为控制语言+js架构思想

setTimeout(fn, 0);

��v�©�¢¤¬�

Page 125: 第三课:JS-行为控制语言+js架构思想

?#(*)30$f%)3$+#I*()"35M%)/H/2)49%)30)"9$)g/0)0##$)/0)-#0034,*;g

��v�©�¢¤¬�

Page 126: 第三课:JS-行为控制语言+js架构思想

?##I3*0

��v�©�¢¤¬�

Page 127: 第三课:JS-行为控制语言+js架构思想

W)833:#,)30)/)0:/,,)/:#9$%)#O)$/:*()(/%/)0%#"*()42)%M*)H*4)4"#H0*"

��v�©�¢¤¬�

Page 128: 第三课:JS-行为控制语言+js架构思想

446 document.cookie = 'username=berg';447 448 var nextYear = new Date();449 nextYear.setFullYear(nextYear.getFullYear() + 1);450 document.cookie = 'username=berg; expires=' + nextYear.toGMTString();

��v�©�¢¤¬�

Page 129: 第三课:JS-行为控制语言+js架构思想

452 function getCookie(key) {453 var reg = new RegExp('(^| )' + key + '=([^;]*)(;|\x24)'),454 result = reg.exec(document.cookie);455 456 if (result) {457 return result[2] || null;458 }459 460 return null;461 }462 getCookie('username');

��v�©�¢¤¬�

Page 130: 第三课:JS-行为控制语言+js架构思想

Advanced scripting��v�©�¢¤¬�

Page 131: 第三课:JS-行为控制语言+js架构思想

?#::9$31/%*)H3%M)/)H*4)0*"+*")H3%M#9%)1/903$5)%M*)H*4)4"#H0*")"*,#/(

��v�©�¢¤¬�

Page 132: 第三课:JS-行为控制语言+js架构思想

!WG/D

!mAB6%%-e*n9*0%)#")W1%3+*mE4G*1%

!F"#H0*)M30%#"2)1#$%"#,

!C/5*)"*$(*"

��v�©�¢¤¬�

Page 133: 第三课:JS-行为控制语言+js架构思想

@*"+*"&03(*)=/+/01"3-%

��v�©�¢¤¬�

Page 134: 第三课:JS-行为控制语言+js架构思想

466 var http = require('http');467 http.createServer(function(req, res) {468 res.writeHead(200, {'Content-Type': 'text/plain'});469 res.end('Hello World\n');470 }).listen(1337, '127.0.0.1');471 console.log('Server running at http://127.0.0.1:1337/');

��v�©�¢¤¬�

Page 135: 第三课:JS-行为控制语言+js架构思想

68ABo)O*/%9"*0

��v�©�¢¤¬�

Page 136: 第三课:JS-行为控制语言+js架构思想

e*O*"*$1*)&)4##I0

!=/+/@1"3-%K)8M*)[*]$3%3+*)d93(*)&)[/+3()!,/$/5/$

!!"#"$%&'()*+,-.+/001+2"&)$+3+40567"$+8&0%9:0&1

!C"#)=/+/01"3-%)[*035$)C/%%*"$0)&)e#00)6/":*0.)[90%3$)[3/L

!--I)#$)=/+/01"3-%)&)C*%*"&C/9,)p#1M

��v�©�¢¤¬�

Page 138: 第三课:JS-行为控制语言+js架构思想

QA��v�©�¢¤¬�

Page 139: 第三课:JS-行为控制语言+js架构思想

!anks

��v�©�¢¤¬�

Page 140: 第三课:JS-行为控制语言+js架构思想

=/+/01"3-%)4/031P

berg Javascript basic+berg

8M*)(*035$)U)/"1M3%*1%9"*)#O)8/$5"/:

��v�©�¢¤¬�

Page 141: 第三课:JS-行为控制语言+js架构思想

xĦ¶²¥��?��v�©�¢¤¬�

Page 142: 第三课:JS-行为控制语言+js架构思想

A library is like a toolkit

��v�©�¢¤¬�

Page 143: 第三课:JS-行为控制语言+js架构思想

��v�©�¢¤¬�

Page 144: 第三课:JS-行为控制语言+js架构思想

ÉzÊ�M

��v�©�¢¤¬�

Page 145: 第三课:JS-行为控制语言+js架构思想

�à�M

��v�©�¢¤¬�

Page 146: 第三课:JS-行为控制语言+js架构思想

��v�©�¢¤¬�

Page 147: 第三课:JS-行为控制语言+js架构思想

0.5sdelay

��v�©�¢¤¬�

Page 148: 第三课:JS-行为控制语言+js架构思想

��v�©�¢¤¬�

Page 149: 第三课:JS-行为控制语言+js架构思想

20%��v�©�¢¤¬�

Page 150: 第三课:JS-行为控制语言+js架构思想

Ð<�M

��v�©�¢¤¬�

Page 151: 第三课:JS-行为控制语言+js架构思想

Changing Every Day��v�©�¢¤¬�

Page 152: 第三课:JS-行为控制语言+js架构思想

��§�ÆĈ

��v�©�¢¤¬�

Page 153: 第三课:JS-行为控制语言+js架构思想

• Prototype

• jQuery

• mootools

• sencha (EXT)

��v�©�¢¤¬�

Page 154: 第三课:JS-行为控制语言+js架构思想

• �#$�Ħ�oµ�

• �Óy\

• �ñ�Â%�

• �[ĊI>�{B

��v�©�¢¤¬�

Page 155: 第三课:JS-行为控制语言+js架构思想

��v�©�¢¤¬�

Page 156: 第三课:JS-行为控制语言+js架构思想

Tangram

��v�©�¢¤¬�

Page 157: 第三课:JS-行为控制语言+js架构思想

[ˈtæŋɡrəm]

ĨTangĩ°í�PN«ÊJç

ĨGramĩ°ísì�Ĭþ�Ĩ�Mĩ

��þÿÊ��m¥ĨN«Ê�Mĩħ

��v�©�¢¤¬�

Page 158: 第三课:JS-行为控制语言+js架构思想

[ˈtæŋɡrəm]

ĨTangĩ°í�PN«ÊJç

ĨGramĩ°ísì�Ĭþ�Ĩ�Mĩ

��þÿÊ��m¥ĨN«Ê�Mĩħ

��v�©�¢¤¬�

Page 159: 第三课:JS-行为控制语言+js架构思想

M%%-K>>%/$5"/:;4/3(9;1#:

��v�©�¢¤¬�

Page 160: 第三课:JS-行为控制语言+js架构思想

Component

Base

DOM event ajax

fx

base

behaviors other

...

core

extra

plugin

UI

button

dialog

menubar

... Editor

Mobile

��v�©�¢¤¬�

Page 161: 第三课:JS-行为控制语言+js架构思想

tangram base��v�©�¢¤¬�

Page 162: 第三课:JS-行为控制语言+js架构思想

Éz�MâÁ�

• ĝ¸Z´;• ē1�Mâ�ëô¸Ĥ• �Mâ�Ę`R7×ĀÆĦ��• å±Y¯ÊđÈßæ

��v�©�¢¤¬�

Page 163: 第三课:JS-行为控制语言+js架构思想

ýú�ă

• £�iòĦ�o• a(ĬĒ&,Ö• �ĝðC�Î

��v�©�¢¤¬�

Page 164: 第三课:JS-行为控制语言+js架构思想

bà·

• ¨l¦Ğ ĭER~7�ÆU��W��Dė

• a(¡c ĭ ��oAÅgāL�Ügā

��v�©�¢¤¬�

Page 165: 第三课:JS-行为控制语言+js架构思想

• 0�á5Êĝ¸ċ�• í9ÜÄ"Ă• �Îċ�OLĆ:r*ðC¨k�ÎĜ

bà·

��v�©�¢¤¬�

Page 166: 第三课:JS-行为控制语言+js架构思想

core

extra

µ� ¹

�o ¹

��v�©�¢¤¬�

Page 167: 第三课:JS-行为控制语言+js架构思想

codesearch

• http://fe/stable/tangram/codesearch.html

• ċ��ĝôÊ�Ε ½/h.•����url

��v�©�¢¤¬�

Page 169: 第三课:JS-行为控制语言+js架构思想

DOM

• ď@• ��• 4�• ³�• )�Īċ�OĬreadyÙī

��v�©�¢¤¬�

Page 170: 第三课:JS-行为控制语言+js架构思想

Event

on

un

get

once

fire

��v�©�¢¤¬�

Page 171: 第三课:JS-行为控制语言+js架构思想

browser

• À­G• isSome

��v�©�¢¤¬�

Page 172: 第三课:JS-行为控制语言+js架构思想

• array

• object

• number

• date

• string

• trim/format

• url

• swf

• cookie

• json

��v�©�¢¤¬�

Page 173: 第三课:JS-行为控制语言+js架构思想

ajax

get

request

post

form

��v�©�¢¤¬�

Page 174: 第三课:JS-行为控制语言+js架构思想

lang

Class

Event

isXXX

inherits

module

��v�©�¢¤¬�

Page 175: 第三课:JS-行为控制语言+js架构思想

lang

dispatchEvent

addEventListener

removeEventListener

guid

instance

decontrol

��v�©�¢¤¬�

Page 176: 第三课:JS-行为控制语言+js架构思想

page

createStyleSheet

loadJsFile

getMousePosition

loadCssFile

getHeight

getScrollLeft

getScrollTop

getViewHeight

getViewWidth

getWidth

��v�©�¢¤¬�

Page 177: 第三课:JS-行为控制语言+js架构思想

?/01/(*

231 T.e('#header').232 children().233 on('click', function() {234 alert('clicked');235 });

��v�©�¢¤¬�

Page 178: 第三课:JS-行为控制语言+js架构思想

tangram UI��v�©�¢¤¬�

Page 179: 第三课:JS-行为控制语言+js架构思想

Éz�MâÁ�

• ĝ¸Z´Ĭ?�ã�ÌgÚ?• �ëô¸Ĥ• 8ą¨k;

��v�©�¢¤¬�

Page 180: 第三课:JS-行为控制语言+js架构思想

ýú�ă

• Ĥ�ëĬa(FĠ• �ĝãI��Á�• £iòĬFĖÆ

��v�©�¢¤¬�

Page 181: 第三课:JS-行为控制语言+js架构思想

bà·

• ĕÆ_Ø��2Ď��• ��ªDOMï½

• čĈ��®6°øê��• ãILñ�Ėƨ\;

��v�©�¢¤¬�

Page 182: 第三课:JS-行为控制语言+js架构思想

constructor

prototype

...

...

...

��v�©�¢¤¬�

Page 183: 第三课:JS-行为控制语言+js架构思想

��üÁ�F��

��v�©�¢¤¬�

Page 184: 第三课:JS-行为控制语言+js架构思想

constructor

prototype

��v�©�¢¤¬�

Page 185: 第三课:JS-行为控制语言+js架构思想

constructor

prototype

addon constructor

addon prototype

��v�©�¢¤¬�

Page 186: 第三课:JS-行为控制语言+js架构思想

ui.some.create({ });

ui.some.options = { };

ui.Some.extend({ });

p�ČnõËb Ĕé

ğ�Ĕé

ĥûĔé

��v�©�¢¤¬�

Page 187: 第三课:JS-行为控制语言+js架构思想

�ñ¾Ý±ĎO

�ñ��±ĎO

��3];

��b ;ĈÔ

Ě8ñî��

ČáõËp�

��v�©�¢¤¬�

Page 188: 第三课:JS-行为控制语言+js架构思想

UIBase

��v�©�¢¤¬�

Page 189: 第三课:JS-行为控制语言+js架构思想

UIBase

dialogbutton table ...ºÅ

��v�©�¢¤¬�

Page 190: 第三课:JS-行为控制语言+js架构思想

UIBase

dialogbutton table ...

alert

confirm

modal

keyboard

...

��

ºÅ

��v�©�¢¤¬�

Page 191: 第三课:JS-行为控制语言+js架构思想

UIBase

dialogbutton

draggable

table ...

stateable

...

alert

confirm

modal

keyboard

...

ñ

��

ºÅ

��v�©�¢¤¬�

Page 192: 第三课:JS-行为控制语言+js架构思想

button

accordion

uiã� uiñ

carsourel

combox

datepicker

dialog

popup

input

menubaritemset pager

modal

progressbar

slider

starRate

suggestion

tab

tabletooltip

draggable

droppable

stateable

decorator

posable

ColorPalette Login

��v�©�¢¤¬�

Page 193: 第三课:JS-行为控制语言+js架构思想

tangram mobile (beta)

��v�©�¢¤¬�

Page 194: 第三课:JS-行为控制语言+js架构思想

Éz�MâÁ�

• Æ�tf=1ªě• +eHÑ®T• ã�Fë�Y¯

��v�©�¢¤¬�

Page 195: 第三课:JS-行为控制语言+js架构思想

ýú�bÃ

• �!ÞÚÀLuöÀ• ÞÚÀ�2K

• »ĉW}• �!ĊIù�ýXÊ��L9Ç• UI�ß;

��v�©�¢¤¬�

Page 196: 第三课:JS-行为控制语言+js架构思想

tF/0*

F/0*

!D

194*O/(*u3--#-

"#%/%*01/,*0,3(*

'+*$%

(4%/--3$1M0H3-*

%/-%/-6#,(%9"$

<7

F9%%#$?/"0#9"*,B30%`3*HA/0I

C/5*C#-9-@1"#,,*"@,3(*"

8/48##,4/"`3(*#

<74/0*

W((#$0

��v�©�¢¤¬�

Page 197: 第三课:JS-行为控制语言+js架构思想

Ú?F"ĂÊVÏx

��v�©�¢¤¬�

Page 198: 第三课:JS-行为控制语言+js架构思想

��v�©�¢¤¬�

Page 199: 第三课:JS-行为控制语言+js架构思想

Tangram

��v�©�¢¤¬�

Page 200: 第三课:JS-行为控制语言+js架构思想

ÍĐèġ�à

ÉÒ�x

-qQ¿

�ę

÷Ģ^

hao123

ÕĘ

¶úÛ

Ąć

IM

äģ1�

wKÜd

mp3

SQ

Tangram

��v�©�¢¤¬�

Page 201: 第三课:JS-行为控制语言+js架构思想

j���8'Tangramhttp://github.com/BaiduFE

��v�©�¢¤¬�

Page 202: 第三课:JS-行为控制语言+js架构思想

QA��v�©�¢¤¬�

Page 203: 第三课:JS-行为控制语言+js架构思想

Thanks!berg��v�©�¢¤¬�