Spiga

Javascript真谛2——没有类

2008-08-13 15:38:12

摘要:object就是对象的类型。在JavaScript中不管多么复杂的数据和代码,都可以组织成object形式的对象。但JavaScript却没有 “类”的概念! 我们先来看一段JavaScript程序: var life = {};  //光溜溜的生命对象   for(life.age = 1; life.age = 3; life.age++)   {      switch(life.age)     {          case 1: life.body = 卵细胞;   //增加body属性                life.say = function(){alert(this.age+this.body)};                  break;          case 2: life.tail = 尾巴;   //增加tail属性                life.gill = 腮;    //增加gill属性                life.body = 蝌蚪;                  life.say = function(){alert(this.age+this.body+-+this.tail+,+this.gill)};                  break;          case 3: delete life.tail;   //删除tail属性                delete life.gill;   //删除gill属性                life.legs = 四条腿;   //增加legs属性                life.lung = 肺;      //增加lung属性                life.body = 青蛙;                  life.say = function(){alert(this.age+this.body+-+this.legs+,+this.lung)};                  break;     };      life.say();   //调用say方法,此方法逻辑每次都会动态改变 };  …… 阅读全文

Javascript真谛1——回归简单

2008-08-12 17:07:01

摘要:编程世界里只存在两种基本元素,一个是数据,一个是代码。要理解JavaScript,你得首先放下对象和类的概念,回到数据和代码的本原。 JavaScript中的数据很简洁的。简单数据只有 undefined, null, boolean, number和string这五种,而复杂数据只有一种,即object。这就好比中国古典的朴素唯物思想,把世界最基本的元素归为金木水火土,其他复杂的物质都是由这五种基本元素组成。 JavaScript中的代码只体现为一种形式,就是function。 **注意:**以上单词都是小写的,不要和Number, String, Object, Function等JavaScript内置函数混淆了。 先说说简单数据类型吧。 undefined: 代表一切未知的事物,啥都没有,无法想象,代码也就更无法去处理了。 注意:typeof(undefined) 返回也是 undefined。可以将undefined赋值给任何变量或属性,但并不意味了清除了该变量,反而会因此多了一个属性。 null: 有那么一个概念,但没有东西。无中似有,有中还无。虽难以想象,但已经可以用代码来处理了。 注意:typeof(null)返回object,但null并非object,具有null值的变量也并非object。 boolean: 是就是,非就非,没有疑义。对就对,错就错,绝对明确。既能被代码处理,也可以控制代码的流程。 number: 线性的事物,大小和次序分明,多而不乱。便于代码进行批量处理,也控制代码的迭代和循环等。 注意:typeof(NaN)和typeof(Infinity)都返回number 。NaN参与任何数值计算的结构都是NaN,而且 NaN != NaN 。Infinity / Infinity = NaN 。 **string: **  面向人类的理性事物,而不是机器信号。人机信息沟通,代码据此理解人的意图等等,都靠它了。 为了进一步简化编程,Javascript还在这些简单数据之上,再规定了一些特殊含义。这些特殊含义又可以使得Javascript的语句写得更简洁。例如,undefined、null、 、0这四个值转换为逻辑值时就是false,除这四个家伙再加上false本身外,其他任何东西转换为逻辑值时都是true。有趣的是underfine…… 阅读全文

自制原生js工具库——CSS篇

2008-05-08 12:28:02

摘要:源码 /* ******************************************************************* */ /*   CSS FUNCTIONS                                                     */ /* ******************************************************************* */ var CSS = (function() {    var css = {};    // 转换的RGB字符串的形式“的RGB ( 255 , 255 , 255 ) ”到“ #ffffff ”    css.rgb2hex = function(rgbString) {        if (typeof (rgbString) != string || !defined(rgbString.match)) { return null; }        var result = rgbString.match(/^\s*rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*/);        if (result == null) { return rgbString; }        var rgb = +result[1] 16 | +result[2] 8 | +result[3];        var hex = ;        var digits = 0123456789abcdef;        while (rgb != 0) {            hex = digits.charAt(rgb 0xf) + hex;            rgb = 4;       }        while (hex.length 6) { hex = '0' + hex; }        return # + hex;   };    // 转换字符样式    css.hyphen2camel = function(property) {        if (!defined(property) || …… 阅读全文

自制原生js工具库——Event篇

2008-05-07 21:28:34

摘要:源码 /* ******************************************************************* */ /*   EVENT FUNCTIONS                                                   */ /* ******************************************************************* */ var Event = (function() {    var ev = {};    //阻止事件冒泡    ev.stopBubble = function(e) {        // 如果传入了事件对象,那么就是非IE浏览器        if (e)        // 因此它支持W3C的stopPropagation            e.stopPropagation();        else        // 否则,我们得使用IE的方式取消事件冒泡            window.event.cancelBubble = true;   };    //防止发生默认浏览器行为    ev.stopDefault = function(e) {        // 防止默认浏览器行为(W3C)        if (e) e.preventDefault();        // IE中防止浏览器行为的捷径        return false;   };    //    // 由 Dean Edwards 所编写的addEvent/removeEvent 2005    // 由Tino Zijdel整理    // http://dean.edwards.name/weblog/2005/10/add-event/    ev.addEvent = function(element, type, handler) {        //为每个事件处理函数赋予一个独立的ID        if (!handler.$$guid) handler.$$guid = ev.addEvent.guid++;        //…… 阅读全文

自制原生js工具库——DOM篇

2008-05-06 23:33:23

摘要:源码 /* ******************************************************************* */ /*   DOM FUNCTIONS                                                     */ /* ******************************************************************* */ var DOM = (function() {    var dom = {};    //查找相关元素的前兄弟元素    dom.prev = function(elem) {        do {            elem = elem.previousSibling;       } while (elem elem.nodeType != 1);        return elem;   };    //查找相关元素的后兄弟元素    dom.next = function(elem) {        do {            elem = elem.nextSibling;       } while (elem elem.nodeType != 1);        return elem;   };    //查找第一个子元素    dom.first = function(elem) {        elem = elem.firstChild;        return elem elem.nodeType != 1 ? nextSibling(elem) : elem;   };    //查找最后一个子元素    dom.last = function(elem) {        elem = elem.lastChild;        return elem elem.nodeType != 1 ? prevSibling(elem) : elem;   };    //查找父元素    dom.parent = function(elem, num) {        num = nu…… 阅读全文

自制原生js工具库——基础篇

2008-05-05 23:33:45

摘要:源码 /** * Copyright (c)2008 xiaosuo */ /* ******************************************************************* */ /*   UTIL FUNCTIONS                                                   */ /* ******************************************************************* */ var Util = { 'VERSION':1.1 }; //获取id function id(name) {    return document.getElementById(name); } //获取指定元素 function tag(name, elem) {    // 如果不提供上下文元素,则遍历整个文档    return (elem || document).getElementsByTagName(name); } //判断对象是否存在 function defined(o) {    return (typeof (o) != undefined); } /* ******************************************************************* */ /*   OBJECT FUNCTIONS                                                 */ /* ******************************************************************* */ var Obj = (function() {    var object = {};    //检查是否是对象    object.isObject = function(o) {        return (o != null typeof (o) == object defined(o.constructor) o.constructor == Object !defined(o.nodeName)…… 阅读全文