ǰÑÔ
½üÆÚÔÓÊÂÉõ¶à£¬ÕâЩÊÂÇéµÄ»ýÀÛ¶Ô֪ʶÌåϵµÄÌáÉýÓкô¦£¬µ«ÊÇÈ´²»ÄÜÕûÀí³öÀ´£¬Ò²ÕûÀí²»³öÀ´
±ÈÈç˵ÎÒ×î½üÑо¿µÄHybridÔÚÏßÁªµ÷·½°¸±ã¹ýÓÚÒÀÀµÓÚÒµÎñ£¬¾ÍËã·ÖÏíÒ²²»»áÓÐÈ˶Á¶®£¬ÈôÊdzéÒ»µãÀ´·ÖÏíÓÖÒâÒå²»´ó
ÓÖÄÃ×î½ü×öwebapp view ת³¡¶¯»Ñо¿£¬¾ÍÊǼ¸¸ödemo²»¶Ï²âÊÔ£¬¸Ð¾õûÓÐʲô¿É˵µÄ
×îºóÉõÖÁ¶ÔwebappÖеÄHistoryµÄ´¦Àí·½°¸Ò²ÊÇÓÐһЩÐĵã¬Ò»µã·½°¸£¬µ«ÊÇÒÀ¾ÉÄÑÒÔÕûÀí³ÉÎÄ£¬ÓÚÊDZ㿪ʼÎÄ»ÄÁË
Õâ¸öʱºò²»·Á±ãιÊ֪аɣ¬¶ÔjavascriptµÄһЩÀÏ֪ʶµã½øÐÐÕûÀí»Ø¹Ë£¬Ö®ºóÓдó¶¯×÷ÔÙ˵°É£¡
ÎÄÖÐ֪ʶ½öÊǸöÈË»ýÀÛ×ܽᣬÓÐÎóÇëÖ¸³ö
±Õ°ü
×÷ÓÃÓòÁ´
±Õ°üÊÇjavascriptÖÐÒ»¸öÖØÒªÖªÊ¶µã£¬Ò²ÊÇjavascriptÖÐÒ»¿éħ·¨£¬ÎÒÃÇÔÚ²»ÊìϤËûµÄÇé¿öÏ¿ÉÄܱ㾳£Ê¹ÓÃÁË£¬ÊìϤËûÁ˽âËûÊÇ´Ó³õ¼¶ÖÁÖм¶µÄÒ»¸ö±êÖ¾
ÒªÕæÕýÁ˽â±Õ°ü£¬¾ÍµÃ´Ó×÷ÓÃÓòÁ´ËµÆð
javascriptÖУ¬×÷ÓÃÓòÁ´µÄ×÷ÓÃÊÇ¿ØÖƱäÁ¿µÄ·ÃÎÊ˳Ðò£¬½ö´Ë¶øÒÑ
Ê×ÏÈ£¬javascriptÔÚÔËÐÐʱÐèÒªÒ»¸ö»·¾³£¬Õâ¸ö»·¾³±ãÊÇÎÒÃÇËùνִÐÐÉÏÏÂÎÄ£¨execution context£©
Ö´ÐÐÉÏÏÂÎľö¶¨Á˱äÁ¿»òÕߺ¯ÊýÓÐȨÀû·ÃÎÊÆäËüÊý¾Ý£¬Ã¿¸öÖ´Ðл·¾³¶¼ÓÐÒ»¸öÓëÖ®¹ØÁªµÄ±äÁ¿¶ÔÏó£¬ÓÃÓÚ´æ´¢Ö´ÐÐÉÏÏÂÎÄÖж¨ÒåµÄ±äÁ¿»òÕߺ¯Êý
Ò»°ãÇé¿öÏÂÎÒÃÇËù´¦µÄÈ«¾ÖÖ´ÐÐÉÏÏÂÎıãÊÇwindow¶ÔÏó£¬ËùÒÔÈ«¾Ö·¶Î§ÄÚ´´½¨µÄËùÓжÔÏóÈ«²¿ÊÇwindowµÄÊôÐÔ»òÕß·½·¨
º¯ÊýµÄ±äÁ¿¶ÔÏóÒ»°ãÊÇÆä»î¶¯¶ÔÏó£¨activation Object£©
Æä´Î£¬javascriptûÓп鼶×÷ÓÃÓòµÄ¸ÅÄµ«ÊÇÿ¸öº¯ÊýÓÐ×Ô¼ºµÄÖ´ÐÐÉÏÏÂÎÄ£¬Õâ¸ö±ãÊDZäÏàµÄ¿é¼¶×÷ÓÃÓò
ÿִÐÐÒ»¸öº¯Êýʱ£¬º¯ÊýµÄÖ´ÐÐÉÏÏÂÎÄ»á±»ÍÆÈëÒ»¸öÉÏÏÂÎÄÕ»ÖУ¬º¯ÊýÈôÖ´ÐнáÊø£¬Õâ¸öÉÏÏÂÎÄÕ»±ã»á±»µ¯³ö£¬¿ØÖÆÈ¨±ä»ØÖ®Ç°µÄÖ´ÐÐÉÏÏÂÎÄ
µ±´úÂëÔÚÖ´ÐÐÉÏÏÂÎÄÖÐÖ´ÐÐʱ£¬±ä»Ø´´½¨Ò»¸ö×÷ÓÃÓòÁ´£¬Õâ¸ö×÷ÓÃÓòÁ´¿ØÖÆ×ÅÖ´ÐÐÉÏÏÂÎÄÊý¾Ý·ÃÎÊ˳Ðò
function test() { var a = 2; console.log(a); } var a = 1; test(); |
ÔÚÕâÀï±ã¾ßÓÐÁ½¸öÖ´ÐÐÉÏÏÂÎÄ£¬Ò»¸öÊÇwindow£¬Ò»¸öÊÇtestº¯Êý
Ê×ÏÈ£¬ÔÚtestÖ´ÐÐ֮ǰ£¬ÎÒÃÇÈ«¾ÖÖ´ÐÐÉÏÏÂÎÄÒѾ´æÔÚ£¬Ëû±ãÊÇwindow£¬Õâ¸öʱºòÎÒÃÇ»áÓÐaÓëtestÔÚ×÷ÓÃÓò×îǰ¶Ë
Ö´ÐÐtestʱºò£¬ÐγÉtestÖ´ÐÐÉÏÏÂÎÄ£¬ÓÚÊÇ×îǰ¶ËµÄÖ´ÐÐÉÏÏÂÎıä³ÉÁËtest£¬Õâ¸öʱºò»áÏÈÐγɻ¶ÔÏ󣬰üÀ¨argumentsÒÔ¼°a
ÔÚconsole.logʱ£¬»á·ÃÎÊ×÷ÓÃÓòÁ´×î½üµÄa±äÁ¿£¬Ò²¾ÍÊÇ2£¬Õâ¸öÊÇ´òÓ¡³ö2µÄ¸ù±¾ÔÒò£¬ÈôÊÇûÓÐ×÷ÓÃÓòÁ´Õâ¸ö˳Ðò¾Í»µÁË
ÏÂÃæÊÇtestÖ´ÐÐʱºòµÄͼʾ£º

ËùÒÔ×÷ÓÃÓòÁ´Ïà¹ØµÄ֪ʶµãÊÇ£º
¢Ù ¿ØÖƱäÁ¿·ÃÎÊ˳Ðò
¢Ú Ö´ÐÐÉÏÏÂÎİüº¬Ò»¸ö×÷ÓÃÓòÁ´µÄÖ¸Õë
¢Û ¸Ã²ãº¯ÊýÍⲿÓм¸¸öº¯Êý£¬±ã»áÓм¸¸ö»î¶¯¶ÔÏó´ý´¦Àí£¬×÷ÓÃÓòÁ´Ö¸Õë»áÖ¸ÏòÆäÍⲿ»î¶¯¶ÔÏó
¢Ü ×÷ÓÃÓòÁ´ÎªÖ´ÐÐÉÏÏÂÎÄʱº¯ÊýÄÚ²¿ÊôÐÔ£¬²»ÒªÍýÏëÈ¥²Ù×÷
±Õ°üµÄÐγÉ
±Õ°üµÄÐγɱãÊÇÒ»¸öº¯ÊýÖ´ÐÐÉÏÏÂÎÄÖÐÓÐÒ»¸ö±äÁ¿±»ÆäÄÚ²¿º¯ÊýʹÓÃÁË£¬²¢ÇÒÕâ¸öÄÚ²¿º¯Êý±»·µ»ØÁË£¬±ãÐγÉÁËÒ»¸ö±Õ°ü
ÓÉÓÚº¯Êýµ÷Óúó£¬ÍⲿÁÙʱ±äÁ¿±£´æ×ÅÄÚ²¿µÄÒýÓã¬Ö´ÐÐʱ»áÐγÉÄÚ²¿ÉÏÏÂÎÄ»·¾³£¬ÄÚ²¿µÄº¯Êý»á°üº¬ÍⲿµÄ×÷ÓÃÓòÁ´Ö¸ÏòµÄ±äÁ¿¶ÔÏó£¬
Õâ¸öʱºò¾ÍËãÍⲿִÐл·¾³ÏûºÄ£¬ÓÉÓÚÍⲿ±£´æ×ÅÍⲿº¯ÊýµÄ»î¶¯¶ÔÏóµÄÒýÓã¬ËùÒÔÕâ¸ö±äÁ¿¶ÔÏ󲻻ᱻÏûºÄ£¬Õâ¸öÊDZհü²úÉúµÄÔÒò
function test() { var a = 2; return function () { console.log(a); }; } var b = test(); b(); |
ÕâÀï»áÐγÉÈý¸öÖ´Ðл·¾³£¬Ò»¸öÊÇÈ«¾ÖµÄ£¬Ò»¸öÊÇtestµÄ£¬Ò»¸öÊÇÄäÃûº¯Êý£¨×îÖÕÊÇbº¯Êý£©µÄ£¬ÎÒÃÇÒÀ¾É´ÓtestÖ´ÐÐʱ˵Æð
µ±testº¯ÊýÖ´ÐÐʱ£º
»áÐγÉÒ»¸öÖ´ÐÐÉÏÏÂÎÄ£¬Ö´ÐÐÉÏÏÂÎİüº¬Ò»¸ö×÷ÓÃÓòÁ´Ö¸Õ룬²¢ÇÒ»áÐγÉÒ»¸ö»î¶¯¶ÔÏó
ÕâÀïtestµÄ×÷ÓÃÓòÁ´Ö»ÊÇÒ»¸öÖ¸Õ룬ËûÖ»ÊÇÒýÓÃÕâ¸ö»î¶¯¶ÔÏó£¬Ö´ÐнáÊøºóÖ´ÐÐÉÏÏÂÎĻᱻÊÍ·Å£¬×÷ÓÃÓòÁ´Ò²»áÏûʧ£¬µ«ÊÇÆä»î¶¯¶ÔÏóδ±Ø»áGC
ÔÚbÖ´ÐÐʱ£¬ÆäÄäÃûº¯ÊýµÄ×÷ÓÃÓòÁ´±ãÖ¸ÏòÁËÍⲿº¯ÊýµÄ»î¶¯¶ÔÏ󣬲»ÒªÎÊËûÔõô»ñµÃÕâ¸öÖ¸ÕëÒýÓõģ¬Ëû¾ÍÊÇÖªµÀ£¬ÓÚÊÇtestµÄ»î¶¯¶ÔÏó½«Ò»Ö±±»±£´æ£¬Ö±µ½bµ÷ÓýáÊø
ÕâÀïbÖ´ÐеĹØÏµÊÇ£º

¾µäÀý×Ó
¹ØÓÚ±Õ°üÓÐÒ»¸ö¾µäµÄÀý×Ó£¬Ëû±ãÊÇforÑ»·µÄÀý×Ó£º
function createFn() { var ret = [], i; for (i = 0; i < 10; i++) { ret[i] = function () { return i; }; } return ret; } var fns = createFn(); |
Õâ¶Î´úÂë·Ç³£¼òµ¥£¬¸ù¾ÝÒ»¸öÊý×éÐγÉ10¸öº¯Êý£¬Ã¿¸öº¯Êý·µ»ØÆäË÷ÒýÖµ£¬ÕâÀàÓ¦ÓÃÔÚʵ¼Ê¹¤×÷Öлᾳ£Óõ½£¬Ö»²»¹ýÎÒÃÇÐèÒªµÄÊÇÆäË÷Òý¶ÔÓ¦µÄÊý¾Ý£¬¶ø²»ÊǼòµ¥µÄË÷ÒýÁË
ÕâÀà»ácreateFnÖ´ÐÐʱ»áÓÐÁ½¸öÖ´Ðл·¾³£¬Ò»¸öÊÇ×Ô¼ºµÄ£¬Ò»¸öÊÇwindowsµÄ£¬ÄÚ²¿Ö´Ðл·¾³×÷ÓÃÓòÁ´»áÖ¸ÏòÒ»¸ö»î¶¯¶ÔÏó
µ±È»fnsÊý×éÖÐÈÎÒâÒ»¸öº¯ÊýÖ´ÐÐʱ£¬Æä»áʹÓõ½createFnµÄ»î¶¯¶ÔÏóÖеÄÊý¾Ýi£¬¶ø¸Ã»î¶¯¶ÔÏóÊDZ»10¸öº¯Êý¹²Óõ쬶¼ÊÇ10£¬ËùÒÔÓëÔ¤ÆÚ²»ºÏ
¸ÃÎÊÌâµÄ´¦Àí±ãÊǸ÷×ÔÐγÉ×Ô¼ºµÄ±Õ°ü£º
function createFn() { var ret = [], i; for (i = 0; i < 10; i++) { ret[i] = (function (i) { return function () { return i; }; })(i); } return ret; } var fns = createFn(); |
ÕâÀïÑ»·ÖлáÐγÉ10¸ö¶ÀÁ¢µÄÖ´ÐÐÉÏÏÂÎÄ£¬ÆäÖеÄ10¸ö»î¶¯¶ÔÏóµÄarguments¶¼±£´æÁËÍⲿiµÄ¶ÀÁ¢Êý¾Ý£¬¶øÄÚ²¿ÓÖÐγÉÒ»¸ö±Õ°ü·ÃÎÊÁ¢¼´Ö´Ðк¯ÊýµÄÊý¾Ý£¬ËùÒÔÊý¾ÝÕýÈ·ÁË......
ÆäËü±Õ°ü
requireJSÖеıհü
±ê×¼µÄrequireJSÀ´Ëµ¶¼ÊÇÒ»¸öAMDµÄÄ£¿é£¬±ÈÈ磺
define(function () { var add = function (x, y) { return x + y; }; return { add: add }; }); |
ÎÒÃÇÖªµÀ£¬requireJSÿһ´Î¼ÓÔØÆäÄ£¿é½Ô»á±»Ö´ÐÐÒ»´Î£¬²¢ÇÒÖ»»áÖ´ÐÐÒ»´Î£¬Õâ¸öÄ£¿é»á±»requireJSËù±£´æ£¬ËùÒÔÕâ¸öÄäÃûº¯Êý»î¶¯¶ÔÏóÊDz»»á±»Êͷŵģ¬ÇÒÊÇΨһµÄ
Õâ¸öʱºòÎÒÃǺܶà×é¼þ±ã¿ÉÒÔͳһʹÓÃÆä¹¦Äܼ´¿É£¬±ÈÈçÉú³ÉuuidʲôµÄ......µ±È»£¬ÕâÖÖ²»ÊͷŵÄÎÊÌ⣬Ҳ»áµ¼ÖÂheapÖµµÄÌáÉý£¬Õâ¸öÊDz»ÊÇÓÐÎÊÌâ±ãÐèÒª¸÷λȥÑéÖ¤ÁË
webappÖеıհü
webappÒ»°ã»áʹÓÃrequireJS¹ÜÀíÄ£¿é£¬¶øÄÚ²¿ÓÖ»áÐγÉÐí¶àviewµÄʵÀý£¬Õâ¸öʵÀý²¢Çһᱣ´æÏÂÀ´£¬ÕâÑùÒ²»áµ¼ÖºܶຯÊýµÄ»î¶¯¶ÔÏóµÃ²»µ½ÊÍ·Å
Ò»À´¶þÍùÖ®¼ä£¬heapÖµ»á±È´«Í³ÍøÕ¾¸ß£¬Õâ¸öÊÇwebappÒ»¿é±È½ÏÍ·Ì۵ĵط½£¬ÐèÒªÂýÂýÓÅ»¯
ÔÐÍÁ´
×î³õjavascriptûÓÐclassµÄ¸ÅÄÎÒÃÇʹÓõÄÀàÊÇÒÔfunctionÄ£Ä⣬¼Ì³ÐµÄʵÏÖÊÖ¶ÎÒ»°ãÒÀ¿¿ÔÐÍÁ´£¬¼Ì³ÐµÄʹÓÃÒ²ÊÇÆÀ¼ÛÒ»¸öjserµÄÖØÒªÖ¸±ê
ÿ¸öº¯Êý¶¼»á°üº¬Ò»¸öÔÐͶÔÏóprototype
ÔÐͶÔÏóprototype°üº¬Ò»¸öÖ¸Ïò¹¹Ô캯ÊýµÄÖ¸Õëconstructor
ʵÀý¶ÔÏó°üº¬Ò»¸öÄÚ²¿ÊôÐÔ__proto__Ö¸ÕëÖ¸ÏòÔÐͶÔÏóprototype
ÕâÊÇËûÃÇÖ®¼äµÄÈý½Ç¹ØÏµ£º

(function () {
var Person = function (name) {
this.name = name;
};
//Person.prototype = {};//Õâ¾ä½«Ó°ÏìÊ®·Ö¾ßÓÐconstructorÊôÐÔ
Person.prototype.getName = function () {
return this.name;
};
var Student = function (name, sex, id) {
this.name = name || 'ÎÞÃûÊÏ';
this.sex = sex || '²»Ã÷';
this.id = id || 'δÌî'; //ѧºÅ
};
//Ï൱ÓÚ½«Æäprototype¸´ÖÆÁËÒ»´Î£¬ÈôÊǰüº¬constructorµÄ»°½«Ö¸ÏòPerson
Student.prototype = new Person();
Student.prototype.getId = function () {
return this.id;
}
var y = new Person();
var s = new Student;
var s1 = y instanceof Person;
var s2 = s instanceof Student;
var s3 = s instanceof Person;
var s4 = Student.prototype.constructor === Person;
var s5 = Student.constructor === Person;
var s6 = Student.constructor === Function;
var s = '';
})(); |
Ò»°ãÐÎʽµÄ¼Ì³Ð·½Ê½ÈçÉÏ£¬Å¼¶ûÎÒÃÇ»áÕâÑù¸É£º
µ«ÊÇÕâÑù»áµ¼ÖÂprototype¶ÔÏóµÄconstructor¶ÔÏó¶ªÊ§£¬ËùÒÔÐèÒªÕÒ»ØÀ´£¬ÁíÍâÒ»¸öÎÊÌâÊÇ£¬ÕâÀï¼Ì³ÐÐèÒªÖ´Ðи¸ÀàµÄ¹¹Ôì·½·¨£¬ÕâÑùÊÇÓÐÎÊÌâµÄ
±ÈÈ磬¸¸ÀàµÄ¹¹Ô캯ÊýÖÐÓÐһЩʼþ°ó¶¨Ê²Ã´µÄÓë×ÓÀàÎ޹أ¬±ã»áµ¼Ö¸ÃÀà¼Ì³ÐÎÞÓã¬ËùÒԺܶàʱºòÎÒÃÇÐèÒª×Ô¼ºÊµÏּ̳У¬±È½ÏÓÅÑŵÄÊÇprototypeµÄ×ö·¨£¬ÎÒÕâÀï¶ÔÆä½øÐÐÁËÒ»¶¨¸ÄÔì¡£
var arr = [];
var slice = arr.slice;
function create() {
if (arguments.length == 0 || arguments.length > 2) throw '²ÎÊý´íÎó';
var parent = null;
//½«²ÎÊýת»»ÎªÊý×é
var properties = slice.call(arguments);
//Èç¹ûµÚÒ»¸ö²ÎÊýΪÀࣨfunction£©£¬ÄÇô¾Í½«Ö®È¡³ö
if (typeof properties[0] === 'function')
parent = properties.shift();
properties = properties[0];
function klass() {
this.initialize.apply(this, arguments);
}
klass.superclass = parent;
klass.subclasses = [];
if (parent) {
var subclass = function () { };
subclass.prototype = parent.prototype;
klass.prototype = new subclass;
parent.subclasses.push(klass);
}
var ancestor = klass.superclass && klass.superclass.prototype;
for (var k in properties) {
var value = properties[k];
//Âú×ãÌõ¼þ¾ÍÖØÐ´
if (ancestor && typeof value == 'function') {
var argslist = /^\s*function\s*\(([^\(\)]*?)\)\s*?\{/i.exec(value.toString())[1].replace(/\s/i, '').split(',');
//Ö»ÓÐÔÚµÚÒ»¸ö²ÎÊýΪ$superÇé¿öϲÅÐèÒª´¦Àí£¨ÊÇ·ñ¾ßÓÐÖØ¸´·½·¨ÐèÒªÓû§×Ô¼º¾ö¶¨£©
if (argslist[0] === '$super' && ancestor[k]) {
value = (function (methodName, fn) {
return function () {
var scope = this;
var args = [function () {
return ancestor[methodName].apply(scope, arguments);
} ];
return fn.apply(this, args.concat(slice.call(arguments)));
};
})(k, value);
}
}
klass.prototype[k] = value;
}
if (!klass.prototype.initialize)
klass.prototype.initialize = function () { };
klass.prototype.constructor = klass;
return klass;
} |
Ê×ÏÈ£¬¼Ì³ÐʱʹÓÃÒ»¸ö¿Õ¹¹Ô캯ÊýʵÏÖ£¬ÕâÑù²»»áÖ´ÐÐÔ¹¹Ô캯ÊýµÄʵÀý·½·¨£¬Ôٹ淶»¯±ØÐëʵÏÖinitialize·½·¨£¬±£Áô¹¹Ô캯ÊýµÄÈë¿Ú£¬ÕâÀàʵÏֱȽÏÓÅÑÅ£¬½¨Òé¸÷λÊÔÊÔ
javascriptÖеÄDOMʼþ
ʼþÁ÷
PS£ºjavascriptµÄʼþÒ»¿éÎÒ˵µÄ¹»¶àÁË£¬ÕâÀïÔÙ˵һ´Î°É......
javascript×¢²ádomʼþµÄÊֶκࣺܶ
¢Ù Ö±½ÓдÔÚdom±êÇ©ÉÏ£¬onclickµÄ×ö·¨
¢Ú ÔÚjsÖÐÕâÑùд£ºel.onclick = function
ÉÏÊö×ö·¨ÊÂʵÉÏÊDz»ºÃµÄ£¬ÒòΪËûÃÇÎÞ·¨¶à´Î¶¨Ò壬ҲÎÞ·¨×¢Ïú£¬¸ü¼Ó²»ÓÃ˵ʹÓÃʼþίÍлúÖÆÁË
ÉÏÊöÁ½ÖÖ×ö·¨µÄ×îÖÕÈÔÈ»Êǵ÷ÓÃaddEventListener·½Ê½½øÐÐ×¢²áðÅݼ¶±ðµÄʼþ£¬ÓÚÊÇÕâÀïÓÖ³¶µ½ÁËjavascriptʼþµÄ¼¸¸ö½×¶Î
ÔÚDOM2¼¶Ê¼þ¶¨ÒåÖй涨ʼþ°üÀ¨Èý¸ö½×¶Î£¬Õâ¸öÊÇÏÖÓÐDOMʼþµÄ»ù´¡£¬Õâ¸öÒ»µ©¸Ä±ä£¬Ç°¶ËDOMʼþ±ãÐèÒªÖØ×é
Èý¸ö½×¶ÎÊÇʼþʼþ²¶»ñ½×¶Î¡¢´¦ÓÚÄ¿±ê½×¶Î¡¢Ã°Åݽ׶Î
ʼþ²¶»ñÓÉ×îÏȽÓÊÕµ½Ê¼þµÄÔªËØÍù×îÀïÃæ´«
ʼþðÅÝÓÉ×î¾ßÌåÔªËØÍùÉÏ´«ÖÁdocument
Ò»°ã¶øÑÔÊÇÏȲ¶»ñºóðÅÝ£¬µ«ÊÇ´¦Óڽ׶εÄʼþÖ´ÐÐÖ»Óë×¢²á˳ÐòÓйأ¬±ÈÈ磺
ÿ´Îµã»÷Ò»¸öDOMʱºòÎÒÃÇ»áÏÈÅжÏÊÇ·ñ´¦ÓÚʼþ½×¶Î£¬ÈôÊǵ½ÁË´¦Óڽ׶εϰ±ã²»´æÔÚ²¶»ñ½×¶ÎÁË
Ö±½Ó°´ÕÕÕâ¸öDOMµÄʼþ×¢²á˳ÐòÖ´ÐУ¬È»ºóÖ±½Ó½øÈëðÅݽ׶ÎÂß¼£¬ÆäÅжϵÄÒÀ¾ÉÊÇe.targetÓëe.currentTargetÊÇ·ñÏàµÈ
Õâ¸öÉæ¼°µ½Ò»¸öä¯ÀÀÆ÷ÄÚ½¨Ê¼þ¶ÔÏó£¬ÎÒÃÇ×¢²áʼþ·½Ê½¶àÖÖ¶àÑù
³ýÁËaddEventListener¿ÉÒÔ×¢²á²¶»ñ½×¶ÎʼþÍ⣬ÆäÓ෽ʽ½ÔÊÇ×îºóµ÷ÓÃaddEventListener½Ó¿Ú×¢²áðÅݼ¶±ðʼþ
×¢²áµÄʼþ¶ÓÁлá¸ù¾ÝDOMÊ÷Ëù´¦Î»ÖýøÐÐÅÅÁУ¬×îÏȵÄÊÇbody£¬µ½×î¾ßÌåµÄÔªËØ
ÿ´ÎÎÒÃǵã»÷Ò³ÃæÒ»¸öÇøÓò±ã»áÏÈ×öÅжϣ¬ÊÇ·ñ´¦ÓÚµ±Ç°½×¶Î£¬±ÈÈ磺
ÎÒµ±Ç°¾ÍÊǵã»÷µÄÊÇÒ»¸ödiv£¬Èç¹ûe.target==e.currentTarget£¬Õâ¸öʱºò±ã»á°´×¢²á˳ÐòÖ´ÐÐÆäʼþ£¬²»»áÀí»áʼþÊDz¶»ñ»¹ÊÇðÅÝ£¬¶øÌø¹ý²¶»ñÁ÷³Ì£¬½áÊøºó»áÖ´ÐÐðÅݼ¶±ðµÄʼþ£¬ÈôÊÇbodyÉÏÓÐðÅݵã»÷ʼþ£¨Ã»Óв¶»ñ£©Ò²»á´¥·¢£¬ÒÔÉϱãÊÇDOMʼþÏà¹ØÖªÊ¶µã
ʼþðÅÝÊÇʼþίÍÐʵÏֵĻùʯ£¬ÎÒÃÇÔÚÒ³ÃæµÄÿ´Îµã»÷×îÖÕ¶¼»áðÅݵ½Æä¸¸ÔªËØ£¬ËùÒÔÎÒÃÇÔÚdocument´¦¿ÉÒÔ²¶×½µ½ËùÓеÄʼþ£¬Ê¼þίÍÐʵÏֵĺËÐÄ֪ʶµãÊǽâ¾öÒÔÏÂÎÊÌ⣺
¢Ù ÎÒÃÇʼþÊǰ󶨵½documentÉÏÃæ£¬ÄÇôÎÒÔõô֪µÀÎÒÏÖÔÚÊǵã»÷µÄÊ²Ã´ÔªËØÄØ
¢Ú ¾ÍËãÎÒÄܸù¾Ýe.target»ñÈ¡µ±Ç°µã»÷ÔªËØ£¬µ«ÊÇÎÒÔõô֪µÀÊÇÄĸöÔªËØ¾ßÓÐʼþÄØ
¢Û ¾ÍËãÎÒÄܸù¾ÝselectorÈ·¶¨µ±Ç°µã»÷µÄÄĸöÔªËØÐèÒªÖ´ÐÐʼþ£¬µ«ÊÇÎÒÔõôÕҵõ½ÊÇÄĸöʼþÄØ
Èç¹ûÄܽâ¾öÒÔÉÏÎÊÌâµÄ»°£¬ÎÒÃǺóÃæµÄÁ÷³Ì¾Í±È½Ï¼òµ¥ÁË
È·¶¨µ±Ç°ÔªËØÊ¹Óà e.target¼´¿É£¬ËùÒÔÎÒÃÇÎÊÌâÒÔ½â¾ö£¬Æä´Î±ã¸ù¾Ý¸Ã½ÚµãËÑË÷Æä¸¸½Úµã¼´¿É£¬·¢ÏÖ¸¸½ÚµãÓë´«ÈëµÄÑ¡ÔñÆ÷ÓйرãÖ´ÐÐʼþ»Øµ÷¼´¿É
ÕâÀﻹÐèÒªÖØÐÂe.currentTarget£¬²»ÖØÐ´È«²¿»á°ó¶¨ÖÁdocument£¬¼òµ¥ÊµÏÖ£º
var arr = [];
var slice = arr.slice;
var extend = function (src, obj) {
var o = {};
for (var k in src) {
o[k] = src[k];
}
for (var k in obj) {
o[k] = obj[k];
}
return o;
};
function delegate(selector, type, fn) {
var callback = fn;
var handler = function (e) {
//Ñ¡ÔñÆ÷ÕÒµ½µÄÔªËØ
var selectorEl = document.querySelector(selector);
//µ±Ç°µã»÷ÔªËØ
var el = e.target;
//È·¶¨Ñ¡ÔñÆ÷ÕÒµ½µÄÔªËØÊÇ·ñ°üº¬µ±Ç°µã»÷ÔªËØ£¬Èç¹û°üº¬¾ÍÓ¦¸Ã´¥·¢Ê¼þ
/*************
×¢Ò⣬´Ë´¦Ö»ÊǼòµ¥ÊµÏÖ£¬Êµ¼ÊÓ¦ÓûáÓÐÐí¶àÅжÏ
*************/
if (selectorEl.contains(el)) {
var evt = extend(e, { currentTarget: selectorEl });
evt = [evt].concat(slice.call(arguments, 1));
callback.apply(selectorEl, evt);
var s = '';
}
var s = '';
};
document.addEventListener(type, handler, false);
} |
ʼþίÍÐÓÉÓÚÈ«²¿Ê¼þÊǰ󶨵½documentÉϵģ¬ËùÒԻᵼÖÂ×èֹðÅÝʧЧ£¬ºÜ¶à³õѧµÄͬѧ²»ÖªµÀ£¬ÕâÀïҪעÒâ
ʼþÄ£Äâ
ʼþÄ£ÄâÊÇdomʼþµÄÒ»Öָ߼¶Ó¦Óã¬Ò»°ãÇé¿öÏÂÓò»µ½£¬µ«ÊÇһЩ¼«¶ËÇé¿öÏÂËûÊǽâ¾öʵ¼ÊÎÊÌâµÄɱÊÖïµ
ʼþÄ£ÄâÊÇjavascriptʼþ»úÖÆÖÐÏ൱ÓÐÓõŦÄÜ£¬Àí½âʼþÄ£ÄâÓëÉÆÓÃʼþÄ£ÄâÊÇÅбðÒ»¸öǰ¶ËµÄÖØÒªÒÀ¾Ý£¬ËùÒÔ¸÷λһ¶¨ÒªÉîÈëÀí½â
ʼþÒ»°ãÊÇÓÉÓû§²Ù×÷´¥·¢£¬ÆäʵjavascriptÒ²ÊÇ¿ÉÒÔ´¥·¢µÄ£¬±È½ÏÖØÒªµÄÊÇ£¬javascriptÄ£ÄâµÄ´¥·¢×ñÑʼþÁ÷»úÖÆ£¡£¡£¡
Òâ˼¾ÍÊÇ£¬javascript´¥·¢µÄʼþÓëä¯ÀÀÆ÷±¾Éí´¥·¢ÆäʵÊÇÒ»ÑùµÄ£¬¼òµ¥Ä£Äâʼþµã»÷£º
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <style type="text/css"> #p { width: 300px; height: 300px; padding: 10px; border: 1px solid black; } #c { width: 100px; height: 100px; border: 1px solid red; } </style> </head> <body> <div id="p"> parent <div id="c"> child </div> </div> <script type="text/javascript"> alert = function (msg) { console.log(msg); }
var p = document.getElementById('p'),
c = document.getElementById('c');
c.addEventListener('click', function (e) {
console.log(e);
alert('×ӽڵ㲶»ñ')
}, true);
c.addEventListener('click', function (e) {
console.log(e);
alert('×Ó½ÚµãðÅÝ')
}, false);
p.addEventListener('click', function (e) {
console.log(e);
alert('¸¸½Úµã²¶»ñ')
}, true);
p.addEventListener('click', function (e) {
console.log(e);
alert('¸¸½ÚµãðÅÝ')
}, false);
document.addEventListener('keydown', function
(e) {
if (e.keyCode == '32') {
var type = 'click'; //Òª´¥·¢µÄʼþÀàÐÍ
var bubbles = true; //ʼþÊÇ·ñ¿ÉÒÔðÅÝ
var cancelable = true; //ʼþÊÇ·ñ¿ÉÒÔ×èÖ¹ä¯ÀÀÆ÷ĬÈÏʼþ
var view = document.defaultView; //Óëʼþ¹ØÁªµÄÊÓͼ£¬¸ÃÊôÐÔĬÈϼ´¿É£¬²»¹Ü
var detail = 0;
var screenX = 0;
var screenY = 0;
var clientX = 0;
var clientY = 0;
var ctrlKey = false; //ÊÇ·ñ°´ÏÂctrl
var altKey = false; //ÊÇ·ñ°´ÏÂalt
var shiftKey = false;
var metaKey = false;
var button = 0; //±íʾ°´ÏÂÄÄÒ»¸öÊó±ê¼ü
var relatedTarget = 0; //Ä£Äâmousemove»òÕßoutʱºòÓõ½£¬ÓëʼþÏà¹ØµÄ¶ÔÏó
var event = document.createEvent('Events');
event.myFlag = 'ҶСîÎ';
event.initEvent(type, bubbles, cancelable, view,
detail, screenX, screenY, clientX, clientY,
ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget);
console.log(event);
c.dispatchEvent(event);
}
}, false);
</script>
</body>
</html> |
Ä£Äâµã»÷ʼþÊǽâ¾öÒÆ¶¯¶Ëµã»÷ÏìÓ¦µÄ»ùʯ£¬ÓÐÐËȤµÄͬѧ×Ô¼ºÈ¥Ñо¿Ï°ɣ¬ÎÒÕâÀï²»¶à˵
ÑÓʱִÐÐ
ÑÓʱִÐÐsettimeoutÊÇjavascriptÖеÄÒ»µÀÀûÆ÷£¬ºÜ¶àʱºòÒ»µ©½â¾ö²»ÁËÎÒÃDZã»áʹÓÃsettimeout£¬µ«ÊǶÔsettimeoutµÄÀí½âÉÏ£¬ºÜ¶à³õѧµÄÅóÓÑÓÐÒ»¶¨ÎóÇø
³õѧµÄÅóÓÑÒ»°ãÈÏΪsettimeoutÊÇÔÚ¶àÉÙºÁÃëºó±ã»á±»Ö´ÐУ¬ÊÂʵÉÏÆäºóÃæµÄÊý¾Ý´ú±íµÄÊÇÒ»¸öʱ¼äƬ£¬»òÕß˵ÊÇÓÅÏȼ¶£¬settimeoutµÄ»Øµ÷»áÔÚÖ÷¸É³ÌÐòÖ®ºóÖ´ÐÐ
±ÈÈ磺
var a = 0, b = 1; setInterval(function () { a = 1; }, 0) while (1) { //... b++; if(a == 1) break; } |
ÒÔÏ´úÂë»áµ¼ÖÂä¯ÀÀÆ÷¼ÙËÀ£¬ÒòΪsettimeoutÖеĴúÂëÓÀÔ¶²»»áÖ´ÐÐ
settimeoutÕæÕýµÄµÄÓ÷¨ÊÇ£º
¢Ù ÑÓʱÇëÇ󣬼õÉÙ²»±ØÒªµÄÇëÇó
¢Ú ÐèÒª¹ý¶àµÄ²Ù×÷dom½á¹¹Ê±£¬ÎªÁ˱հüä¯ÀÀÆ÷¼ÙËÀ£¬¿ÉÒÔʹÓÃsettimeout
ÁíÍ⣬zeptoÖÐÓÐÒ»¶ÎÓësettimeoutÓйصijÜÈè´úÂ룬ÔÚÄ£Äâtapʼþʱºò£¬zeptoʹÓÃdomÄ£ÄâclickʼþµÄ·½Ê½ÊµÏÖÁË£º
.on('touchend MSPointerUp pointerup', function(e){
if((_isPointerType = isPointerEventType(e, 'up')) &&
!isPrimaryTouch(e)) return
cancelLongTap()
// swipe
if ((touch.x2 && Math.abs(touch.x1 - touch.x2) > 30) ||
(touch.y2 && Math.abs(touch.y1 - touch.y2) > 30))
swipeTimeout = setTimeout(function() {
touch.el.trigger('swipe')
touch.el.trigger('swipe' + (swipeDirection(touch.x1, touch.x2, touch.y1, touch.y2)))
touch = {}
}, 0)
// normal tap
else if ('last' in touch)
if (deltaX < 30 && deltaY < 30) {
tapTimeout = setTimeout(function() {
var event = $.Event('tap')
event.cancelTouch = cancelAll
touch.el.trigger(event)
if (touch.isDoubleTap) {
if (touch.el) touch.el.trigger('doubleTap')
touch = {}
}
else {
touchTimeout = setTimeout(function(){
touchTimeout = null
if (touch.el) touch.el.trigger('singleTap')
touch = {}
}, 250)
}
}, 0)
} else {
touch = {}
}
deltaX = deltaY = 0
}) |
±È½Ï¹·ÑªµÄÊÇ£¬ËûÔÚtapÕâÀïʹÓÃÁËsettimeout£¬µ¼ÖÂÁËÒ»¸öÑÓʱ£¬Õâ¸öÑÓʱЧ¹ûÖ±½ÓµÄÓ°Ïì±ãÊÇÆäevent²ÎÊýʧЧ
Ò²¾ÍÊÇÕâÀtouchendʱºò´«ÈëµÄevent²ÎÊý²»»á±»tapʼþÓõ½£¬Ê²Ã´e.preventDefaultÖ®ÀàµÄ²Ù×÷±ãÓÚtapÎÞ¹ØÁË£¬´ËÀàʵÏÖÖÁ½ñδ¸Ä
ÆäËü
localstorage
localstorageµÄʹÓÃÔÚÎÒ³§webappµÄÓ¦ÓÃÖУ¬´ïµ½ÁËÒ»¸öǰËùδÓеĸ߶ȣ¬ÎÒÃǾªÆæµÄ·¢ÏÖ£¬ÆäÕæÊµÈÝÁ¿ÊÇ£º
localstorage µÄ×î´óÏÞÖÆ°´×Ö·ûÊýÀ´Ë㣬ÖÐÓ¢ÎͼÊÇ×î¶à500¶àÍò¸ö×Ö·û£¬webkitΪ5242880¸ö
ÓÚÊǺܶàʱºò£¬localstorageµÄÀÄÓñã»áÒý·¢localstorage´æ´¢Ê§Ð§£¬µ¼ÖÂÒµÎñ´íÎó
²¢ÇÒlocalstorageµÄÀÄÓû¹±íÏÖÔÚ´æ´¢ÒµÎñ¹Ø¼üÐÅÏ¢µ¼ÖÂurl¶ÔÍâ²»¿ÉÓõÄÇé¿ö£¬ËùÒÔʹÓÃlocalstorageµÄÅóÓÑÒªÉ÷ÖØ£¡
ÆäËü
......
½áÓï
½ñÌìÎÒÃÇ»¨ÁËÒ»µãʱ¼ä»Ø¹ËÁËһЩjavascriptµÄºËÐÄ֪ʶµã£¬Ï£Íû¶Ô¸÷λÓÐÓã¬ÎÒÕâÀïÏȳ·ÍËÁË£¬ÎÄÖÐÀí½âÓÐÎóÇëÌá³ö
|