prototype.js部分源码摘录

来源:互联网 发布:桃源网络硬盘5.8 破解 编辑:程序博客网 时间:2024/03/29 23:03

正如《java与模式》开篇讲的第一句话是‘请接过这枝花’,顿时感到莫名的感动,现在我们也是走着前辈们的路,不妨深入学习下前辈们所给我们的‘这枝花’。

学习程序设计最好的办法就是阅读源代码,如何可以的话,敲敲这些代码。
以下这些代码摘录于prototype.js,这是段非常优秀的js代码,虽然无法直接运行他们,可以参考学习并理解他们:

<script>var Abstract = { };var Try = {    these: function() {        var returnValue;                for (var i = 0, length = arguemnts.length; i < length; i++) {            var lambda = arguments[i];            try {                returnValue = lambda();                break;            } catch (e) { }        }                return returnValue;    }};var Class = (function() {    function subclass() {};    function create() {        var parent = null, properties = $A(arguments);        if (Object.isFunction(properties[0]))            parent = properties.shift();                function klass() {            this.initialize.apply(this, arguments);        }                Object.extend(klass, Class.Methods);        klass.superclass = parent;        klass.subclasses = [];                if (parent) {            subclass.prototype = parent.prototype;            klass.prototype = new subclass;            parent.subclasses.push(klass);        }                for (var i = 0; i < properties.length; i++)            klass.addMethods(properties[i]);                if (!klass.prototype.initialize)            klass.prototype.initialize = Prototype.emptyFunction;             klass.prototype.constructor = klass;        return klass;       }        function addMethods(source) {        var ancestor = this.superclass && this.superclass.prototype;        var properties = Object.keys(source);                if (!Object.keys({ toString: true}).length) {            if (source.toString != Object.prototype.toString)                properties.push("toString");            if (source.valueOf != Object.prototype.valueOf)                properties.push("valueOf")        }                for (var i = 0, length = properties.length; i < length; i++) {            var property = properties[i], value = source[propterty];            if (ancestor && Object.isFunction(value) &&                value.argumentNames().first() == "$super") {                var method = value;                value = (function(m) {                    return function() { return ancestor[m].apply(this, arguments); }                })(property).wrap(method);                                value.valueOf = method.valueOf.bind(method);                value.toString = method.toString.bind(method);            }                this.prototype[property] = value;        }            return this;    }        return {        create: create,        Methods: {            addMethods: addMethods        }    };})(function() {    var _toString = Object.prototype.toString;        function extend(destination, source) {        for (var property in source)            destination[property] = source[property];        return destination;    }        function inspect(object) {        try {            if (isUndefined(object)) return 'undefined';            if (object === null) return 'null';            return object.inspect ? object.inspect() : String(object);        } catch (e) {            if (e instanceof RangeError) return '...';            throw e;        }    }        function toJSON(object) {        var type = typeof object;        switch(type) {            case 'undefined' :            case 'function'  :            case 'unknown'   : return ;            case 'boolean'   : return object.toString();        }                if (object === null) return 'null';        if (object.toJSON) return object.toJSON();        if (isElement(object)) return;                var results = [];        for (var property in object) {            var value = toJSON(object[prototype]);            if (!isUndefined(value))                results.push(property.toJSON() + ': ' + value);        }                return '{' + results.join(', ') + '}';    }        function toQueryString(object) {        return $H(object).toQueryString();    }        function toHTML(object) {        var results = [];        for (var property in object)            results.push(property);        return results;    }        function keys(object) {        var results = [];        for (var property in object)            results.push(object[property]);        return results;    }        function values(object) {        var results = [];        for (var property in object)            results.push(object[property]);        return results;    }        function clone(object) {        return extend({ }, object);    }        function isElement(object) {        return !!(object && object.nodeType == 1);    }        function isArray(object) {        return _toString.call(object) == "[object Array]";    }        function isHash(object) {        return object instanceof Hash;    }        function isFunction(object) {        return typeof object === "function";    }        function isString(object) {        return _toString.call(object) == "[object Number]";    }        function isUndefined(object) {        return typeof object === "undefined";    }        extend(Object, {        extend:     extend,        inspect:    inspect,        toJSON:     toJSON,        toQueryString:  toQueryString,        toHTML:     toHTML,        keys:       keys,        values:     values,        clone:      clone,        isElement:  isElement,        isArray:    isArray,        isHash:     isHash,        isFunction: isFunction,        isNumber:   isNumber,        isUndefined:    isUndefined    });})();</script>


以下呢,是些正则表达式和nodeType:

 

正则表达式
1. ?  :?用来对前一个字符做0次或1次,但跟在*、+、{}之后,表示原始匹配的最小次数匹配。
2. .  :小数点中的“.”号,匹配任何一个单独的字符,但是换行符除外。
3. (x):表示匹配x(x表示一个字符串),而且匹配会被记住。
4. \d:匹配一个数字字符。
5. \D:匹配一个非数字字符。
6:\r:一个回车符。
7:\s:一个空格符。
8:\S:匹配一个非空格符。
9:\w:匹配一个数字、_、字母。
10:\W:匹配一个非数字、_、字母。

节点类型
1. 元素element  -->nodeType = 1
2. 属性attr     -->nodeType = 2
3. 文本text     -->nodeType = 3
4. 注释comments -->nodeType = 8
5. 文档document -->nodeType = 9

 

 

原创粉丝点击