随笔分类 - Javascript
摘要:原文在我的博客上:http://www.poised-flw.com/javascript/2013/05/10/avoid-null-comparisons/JS中的检测在Javascript中, 测试一个变量是否为null很普遍, 但是却有问题. 如:var Controller = { process: function(items) { if (items !== null) { // Bad items.sort(); items.forEach(function(item) { // do...
阅读全文
摘要:前言在Web开发中,UI被定义为以下三个层的组合:HTML: 结构化需要显示的数据.CSS: 视觉上的渲染.JavaScript: 增强页面的交互性.通常的UI布局是这样的, HTML层作为基础, CSS, JavaScript层在他的上面: 事实是, 某些应用中Javascript并不依靠于css, 存在这样的应用: 只有JS和Html; 或者只有Html和Css. 这都是有可能的, 故Javascript和css的关系应该是平等的!例如: 尽管JavaScript和Css之间存在某些相互作用(如动态改变元素的className等.), JavaScript也能消除和CSS之间的依赖关系而.
阅读全文
摘要:1.直接插入排序(Straight Insertion Sort): 1 /* 2 * 插入排序 3 * O(n^2) 4 * */ 5 Array.prototype.insertSort = function () { 6 var i,j,temp; 7 for(i=2; i<this.length; i++){ 8 //先判断一下,不是递增序列则进行移动插入操作 9 if(this[i] < this[i-1]){10 //记录需要进行插入的元素,找到它应该插入的位置11 temp = ...
阅读全文
摘要:像我这种第一们语言是C的程序猿,接触到JS的时候也秉承着C的风格;直到看了开源社区那些让人痴迷的代码风格以后,决定彻头彻尾的改变自己编写js代码的规范!本篇中主要的规范都来自于《Maintainable JavaScript》byNicholas C. Zakas. 介绍两个非常有用的工具:JSLint, JSHint.缩进问题推荐两种风格的缩进4个空格: 这种缩进的好处是在任何的编辑器下表现的方式是一致的!Tab缩进: 经常使用的缩进方式, 但是在有些编辑器中表现的形式并不一样, 一般是4个空格, 但有些编辑器会解释成8个空格等等...if ( contition ) { var...
阅读全文
摘要:做到这一步,我的这个jquery框架已经具备了基本的选择器功能(只能直接选择dom节点对象),还具备可扩展功能extend().封装js方法我们所知道的js能处理DOM元素的方法有:document.getElementsByTagName(); //获取html标签的dom元素集合document.getElementById(); //获取带ID的DOM元素//引用DOM节点childNodes;firstChild;lastChild;nextSibling;parentNode;previousSibling;接下来封装到我的插件中去./*more about ...
阅读全文
摘要:本篇继续丰富我的jquery框架,利用extend来扩展!扩展的优点不必每次增加新的方法都直接往jQuery或者jQuery.fn追加.jQuery.fn.extend({ fun1: function() { console.log('this is an extend function'); }})通过这样的方法就能为jQuery扩展一个名叫fun1()的方法.然后能直接调用它$('div').fun1(); //this is an extend functionextend()方法的基本思想就是把指定对象的方法都复制给jQuery或者jQuery.pr.
阅读全文
摘要:现在来实现jquery插件中经典的几个方法.对象的遍历经典的用法:$('div').each(function() { //do something});现在给我的jquery扩展一个each()方法:jQuery.each = function(object, callback, args) { for(var i in object) callback.call(object[i], args); return object;}两个地方:1.通过for循环遍历对象集合中的所有对象2.为每个对象绑定相同的回调函数callback(),有个问题.就是对于不变的回...
阅读全文
摘要:通过前几篇的分析,大体的画出了jquery的框架,但是它确不具备现实中jquery插件的一切功能!现实中是怎样的?$('#id'); //我能选择一个id为id的dom元素$('.class'); //我也能选择一个class为class的dom元素$('div'); //我还能选择当前页面中的所有div接受参数首先给我的插件能传递一个参数,初步具备选择器的功能:/* selector: 选择器参数 context: 选择的范围 */var $ = jQuery = function(selector, context) { return new
阅读全文
摘要:上篇已经介绍了由于this指向的一些困扰带来的问题.现在分析怎么实现init的this和原型对象中的this分开.实例化init如下的修改过程:var $ = jQuery = function() { return new jQuery.fn.init(); //实例化init,分割作用域}这里通过返回init的一个实例,想一下.如果现在调用init实例,this指向谁?jQuery.fn中的this又指向谁?就上面的两个问题,init中的this肯定是指向当前所构造的对象实例(this总是指向类的实例).通俗的讲this目前的"活动范围"就是init这一块!通过下面的测
阅读全文
摘要:通过上篇文章的介绍,我们已经能在不使用new关键字的情况下返回一个实例,并且这个实例也拥有了自己的属性和方法.下面就这个简单的框架发现其中的不足this指向谁?若我们把原型对象里面的init函数也视为构造函数,则当前的this该指向谁?var $ = jQuery = function() { return jQuery.fn.init();}jQuery.fn = jQuery.prototype = { init: function() { this.length = 0; this.test = function() { re...
阅读全文
摘要:用jquery一段时间了,也该了解了解内部的具体实现,算是对javascript的高级应用积累点经验."外观"实现比如说如下代码就是选择一个id为test的DOM节点:var test = $("#test")单从js的语法来分析这个语句,我们能知道$应该一个构造函数,恰好test是$的一个实例!当然#test是构造函数$的参数.这里留下一个小疑问,实例test的创建不需要new关键字???先抛开其他的不管,现在只写$这么一个构造函数:var jQuery = function() { //do something}当然,这个函数表达式的名字嘛也是可以随
阅读全文
摘要:上一篇文章已经对LR分析法做了比较详细的介绍,本篇将主要介绍LR(1)分析表的构造过程:完整的项目请参考:https://github.com/luofei2011/jslr1首先有一些基本概念.LR(1)项目 就是对于一个上下文无关文法G=(V,T,P,S),若存在规范推导:S=>...=>δAω=>δαβω,则称[A->α.β,a]对活前缀γ=δα是有效的.其中α,β,δ是属于V&T并集闭包的元素.a是终结符T.且a是ω的首字符,若ω=ε,则a=#.[A->α.β,a]称为文法G的LR(1)项目,a称为搜索符.例如:如下文法T->xyz具体的LR
阅读全文
摘要:完整的项目请参考:https://github.com/luofei2011/jslr1LR(k)分析法(LR(k) parsing):是一个有效的自底向上分析技术,它适用于一大类上下文无关文法的语法分析.其中:L指的是从左向右扫描输入字符串,R指的是构造最右推导的逆过程,k指的是决定分析动作时需要向前看的符号个数.LR分析法有如下优点: 1.LR分析器能识别所有可用上下文无关文法描述的程序设计语言的结构. 2.LR分析法是已知的最一般的无回溯移进-归约分析法,而且可以和其他移进-归约分析法一样有效地实现. 3.LR分析法分析的文法包含预测分析法所能分析的文法类. 4.在自左向右扫描输...
阅读全文
摘要:在完成编译原理实验第二部分----语法分析的时候,需要对自定义语言的文法进行处理求分析表,我采用了LR分析算法.下面是我的LR(1)分析表构造过程:可以在这里找到最新版本:https://github.com/luofei2011/jslr第一部分:html 1 <!DOCTYPE HTML> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>语法分析</title> 6 <script type=&qu
阅读全文
摘要:转载自:https://developer.mozilla.org/zh-CN/docs/JavaScript/Guide/Inheritance_and_the_prototype_chain对于那些熟悉基于类的面向对象语言(java或者c++)的开发者来说,JavaScript的语法是比较怪异的, 这是由于javascript是一门动态语言,而且它没有类的概念(虽然class是个保留字,不能作为变量名来使用).继承方面,javascript中的每个对象都有一个内部私有的链接指向另一个对象 (或者为null),这个对象就是原对象的原型. 这个原型也有自己的原型, 直到对象的原型为null为止
阅读全文
摘要:在学习闭包之前,要先了解Javascript中作用域(scope)的相关概念:一,变量作用域(Gloabl & Local)1.全局变量能在任何地方被访问; 1 var a = 8; 2 function a(){ 3 alert(a); 4 } 5 a(); //8 6 //假如改写下面一种函数 7 function a(){ 8 alert(a); 9 var a = 1;10 alert(a);11 }12 a(); //undifined, 1后一种情况,在a()的作用域中,变量a被重写(rewrite),故第一个alert的时候提示a未定义.2...
阅读全文
摘要:1 ;(function($) { 2 3 /** 4 * 初始化插件 5 * @author: luofei 6 * @version: 2013/03/22 7 * @param: {array} options 初始化传入的json数据 8 */ 9 10 $.fn.lf = function(options){11 this.opts = $.extend({}, $.fn.lf.defaults, options);12 this._init();13 };14 15 /*16 * 插件的扩展函数 ...
阅读全文

浙公网安备 33010602011771号