随笔分类 -  Web 前端-Javascript(原生)

摘要:function r(){ alert('BBB');}var a = { f: function(){ alert('AAA'); arguments.callee = r; }};弹出的都是“AAA”。 阅读全文
posted @ 2014-04-29 17:27 龙则 阅读(241) 评论(0) 推荐(0)
摘要:是否是有效的dom节点 列表节点 单测结果输出: 阅读全文
posted @ 2014-04-18 16:46 龙则 阅读(391) 评论(2) 推荐(0)
摘要:Baranovskiy参考:http://dmitry.baranovskiy.com/post/91403200题目一:if (!("a" in window)) { var a = 1;}alert(a);答案:undefined关键点:js的所有变量自动提前声明 全局变量挂载在w... 阅读全文
posted @ 2014-04-15 12:25 龙则 阅读(355) 评论(1) 推荐(1)
摘要:一、纠正网络上的一个误传--“IE不支持事件捕获”可以在浏览器中运行上面demo,在各主流浏览器中,鼠标移上都可以分别触发捕获与冒泡事件的监听函数,所以IE也是支持事件捕获的,连IE6都支持,只是在命中元素上事件的触发的顺序会稍有区别,参见下条。二、在命中元素上冒泡和捕获的执行顺序命中元素上事件冒泡和捕获的触发顺序在不同浏览器中的顺序稍有区别,在IE6-8中是先触发捕获再触发冒泡,在IE9及以上、chrome、firefox等浏览器是先触发冒泡再触发捕获三、事件的浏览器兼容方面的东西浏览器\区别添加监听事件名移除监听仅阻止事件冒泡IE6-8attachEvent标准事件名+on,如onclic 阅读全文
posted @ 2014-02-11 17:20 龙则 阅读(2197) 评论(1) 推荐(0)
摘要:紧接上一篇博文:js函数的作用域与this指向先来说说this的作用于链,this后的属性或者方法在使用时是先从本实例中查找,如果找到就先返回,如果没找到就接着向上从原型链中查找,如果有多重继承关系,那就一级一级的找上去,如果最终没找到就返回undifined.看下面示例:代码中实例obj的doFunction方法就是先在本实例查找,因为在本实例中定义了name属性所以返回“MyObj下的name”,如果把“this.name = 'MyObj下的name';”注释掉,那就顺着原型找上去,返回“prototype下的name”。这就是js的链作用域查找机制,利用这个机制就能做一 阅读全文
posted @ 2014-02-10 17:15 龙则 阅读(1193) 评论(0) 推荐(0)
摘要:函数的作用域与this指向是js中很重要的一部分,理清这点东西需要个逻辑,看看我的逻辑怎么样...下面是个提纲,可以直接挑你感兴趣的条目阅读。函数的定义方式:直接定义(window下,内部定义),对象的方法,对象原型的方法;函数的调用方式:直接调用,call/apply,with对于直接定义的函数和对象的方法,作用域默认状态下是它的定义处的作用域链。对于直接定义的函数,this指向window。对于对象的方法,this指向实例化对象(对应于实例化对象默认返回this的情况)。用call/apply改变方法的this指向在函数或方法的定义时可以通过with改变其作用域链。下面分开来具体说说:函数 阅读全文
posted @ 2014-02-10 14:57 龙则 阅读(16510) 评论(0) 推荐(1)
摘要:全部代码: 二级事件模型 先通过demo展示: 为ul分别绑定mouseover的捕获与冒泡事件,为第一个li绑定mouseover的冒泡事件,并终止向上冒泡(stopPropagation) Demo: 第一条(不再向上冒泡) ... 阅读全文
posted @ 2013-11-12 18:09 龙则 阅读(497) 评论(0) 推荐(0)
摘要:全部代码: 事件的循环绑定 利用new来形成闭包做循环绑定 baby honey 利用匿名函数形成闭包 baby honey ... 阅读全文
posted @ 2013-10-11 17:42 龙则 阅读(242) 评论(0) 推荐(0)
摘要:window.setTimeout 阅读全文
posted @ 2013-09-22 21:06 龙则 阅读(387) 评论(0) 推荐(1)
摘要:var b = 0;var arr = [];str = str.replace(/J/g,function(){ var args = arguments; b++; arr.push(args[1]); return '#';});console.log(str+":共替换" + b + "个,替换位置:" + arr.join());//#ack Zhao #ust Me:共替换2个,替换位置:0,10 阅读全文
posted @ 2013-09-09 15:27 龙则 阅读(201) 评论(0) 推荐(0)
摘要://constrain函数var min = 1var max = 3;var num = 4;var result = Math.min(Math.max(num,min),max);console.log(result);若num在边界内返回num,若小于下边界返回下边界,若大于上边界返回上边界。 阅读全文
posted @ 2013-09-09 15:01 龙则 阅读(885) 评论(0) 推荐(0)
摘要://模拟静态var Animal = function(name){ this.name = name; Animal.instanceCounter ++; }; Animal.instanceCounter = 0;Animal.prototype.sayHellow = function(){ console.log('this.name');}var animal = new Animal('name');var animal2 = new Animal('name2');console.log(Animal.instanceCoun.. 阅读全文
posted @ 2013-09-09 14:28 龙则 阅读(1147) 评论(1) 推荐(1)
摘要:改变作用域的call,只是作用域改变了,就是this指向的东东(只接var定义的变量也挂在this下面,但是不能从外访问)function fn() { var name = "阿拉伯"; //this.name = "阿拉伯"; console.log(name); } fn.call(); fn.call({ name: "中国" }); fn.call({ name: "美国" });结果都是“阿拉伯”,应为内部... 阅读全文
posted @ 2013-09-03 21:24 龙则 阅读(245) 评论(0) 推荐(0)
摘要:一个很好玩的小问题考大家对js的理解function alert (){};________________ // 填空alert(1); 使1弹出http://perfectionkills.com/understanding-delete/deletewindow对象在不同浏览器下表现的问题functionalert(){};varalert=function(msg){window.constructor.prototype.alert.call(this,msg)}alert(1); 阅读全文
posted @ 2013-08-14 09:28 龙则 阅读(185) 评论(0) 推荐(0)
摘要:encodeURIComponent('中国人') ==>"%E4%B8%AD%E5%9B%BD%E4%BA%BA"encodeURI('中国人'); ==>"%E4%B8%AD%E5%9B%BD%E4%BA%BA"区别(参考资料--W3Cschool.com):encodeURIComponent() 函数 与 encodeURI() 函数的区别之处,前者假定它的参数是 URI 的一部分(比如协议、主机名、路径或查询字符串)。因此 encodeURIComponent() 函数将转义用于分隔 URI 各个部分 阅读全文
posted @ 2013-08-02 16:08 龙则 阅读(304) 评论(0) 推荐(0)
摘要:var toString = function(obj){ var self = this; switch(typeof(obj)){ case 'object': var ret = []; if (obj instanceof Array){ for (var i = 0, len = obj.length; i < len; i++){ ret.push(arguments.callee(obj[i])); } ... 阅读全文
posted @ 2013-06-18 20:26 龙则 阅读(446) 评论(0) 推荐(0)
摘要:cheyoushuo.ui.alert('appName:' + navigator.appName + '|-----|appCodeName:' + navigator.appCodeName + '|-----|userAgent:' + navigator.userAgent);IE10 :appName:Microsoft Internet Explorer|-----|appCodeName:Mozilla|-----|userAgent:Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6 阅读全文
posted @ 2013-06-07 18:01 龙则 阅读(23973) 评论(0) 推荐(1)
摘要:前言网上还没用发现有人对命名函数表达式进去重复深入的讨论,正因为如此,网上出现了各种各样的误解,本文将从原理和实践两个方面来探讨JavaScript关于命名函数表达式的优缺点。简单的说,命名函数表达式只有一个用户,那就是在Debug或者Profiler分析的时候来描述函数的名称,也可以使用函数名实现递归,但很快你就会发现其实是不切实际的。当然,如果你不关注调试,那就没什么可担心的了,否则,如果你想了解兼容性方面的东西的话,你还是应该继续往下看看。我们先开始看看,什么叫函数表达式,然后再说一下现代调试器如何处理这些表达式,如果你已经对这方面很熟悉的话,请直接跳过此小节。函数表达式和函数声明在EC 阅读全文
posted @ 2013-06-05 18:02 龙则 阅读(255) 评论(0) 推荐(0)
摘要:eval()如果你现在的代码中使用了eval(),记住该咒语“eval()是魔鬼”。此方法接受任意的字符串,并当作JavaScript代码来处理。当有 问题的代码是事先知道的(不是运行时确定的),没有理由使用eval()。如果代码是在运行时动态生成,有一个更好的方式不使用eval而达到同样的目 标。例如,用方括号表示法来访问动态属性会更好更简单:// 反面示例var property = "name";alert(eval("obj." + property));// 更好的var property = "name";alert(ob 阅读全文
posted @ 2013-06-05 16:55 龙则 阅读(285) 评论(0) 推荐(0)
摘要://第一种变化的形式:var i, myarray = [];for (i = myarray.length; i–-;) { // 使用myarray[i]做点什么}补充一下对于单var和作用域原则可以改进为:var myarray = [];for (var i = myarray.length; i–-;) { // 使用myarray[i]做点什么}这样i只在循环内部起作用,如果有多段for循环代码这个i很可能是个隐患//第二种使用while循环:var myarray = [], i = myarray.length;while (i–-) { // 使用myarr... 阅读全文
posted @ 2013-06-05 16:20 龙则 阅读(325) 评论(0) 推荐(0)