• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    寫自已的js類庫需要的核心代碼_js面向對象

    來源:懂視網 責編:小采 時間:2020-11-27 21:03:41
    文檔

    寫自已的js類庫需要的核心代碼_js面向對象

    寫自已的js類庫需要的核心代碼_js面向對象: 代碼如下: (function(win) { var toString = Object.prototype.toString; var hasOwn = Object.prototype.hasOwnProperty; var class2type = {}; class2type[[object Boolean]] = boolean; c
    推薦度:
    導讀寫自已的js類庫需要的核心代碼_js面向對象: 代碼如下: (function(win) { var toString = Object.prototype.toString; var hasOwn = Object.prototype.hasOwnProperty; var class2type = {}; class2type[[object Boolean]] = boolean; c

    代碼如下:
    (function(win) {
    var toString = Object.prototype.toString;
    var hasOwn = Object.prototype.hasOwnProperty;
    var class2type = {};
    class2type["[object Boolean]"] = "boolean";
    class2type["[object Number]"] = "number";
    class2type["[object String]"] = "string";
    class2type["[object Function]"] = "function";
    class2type["[object Array]"] = "array";
    class2type["[object Date]"] = "date";
    class2type["[object RegExp]"] = "regexp";
    class2type["[object Object]"] = "object";
    win.type = function(obj) {
    return obj == null ? String(obj) : class2type[toString.call(obj)] || "object";
    };
    win.isBoolean = function(obj) {
    return type(obj) === "boolean";
    };
    win.isNumber = function(obj) {
    return type(obj) === "number";
    };
    win.isString = function(obj) {
    return type(obj) === "string";
    };
    win.isDate = function(obj) {
    return type(obj) === "date";
    };
    win.isRegExp = function(obj) {
    return type(obj) === "regexp";
    };
    win.isObject = function(obj) {
    return type(obj) === 'object';
    };
    win.isFunction = function(obj) {
    return type(obj) === "function";
    };
    win.isArray = function(obj) {
    return type(obj) === "array";
    };
    win.isWindow = function(obj) {
    return obj
    && typeof obj === "object"
    && "setInterval" in obj;
    };
    win.isNumeric = function(obj) {
    return !isNaN(parseFloat(obj)) && isFinite(obj);
    };
    win.isPlainObject = function(obj) {
    if (!obj
    || type(obj) !== "object"
    || obj.nodeType
    || isWindow(obj)) {
    return false;
    }
    try {
    if (obj.constructor
    && !hasOwn.call(obj, "constructor")
    && !hasOwn.call(obj.constructor.prototype, "isPrototypeOf")) {
    return false;
    }
    } catch (e) {
    return false;
    }
    var key;
    for (key in obj) {
    }
    return key === undefined || hasOwn.call(obj, key);
    };
    win.isEmptyObject = function(obj) {
    for ( var name in obj) {
    return false;
    }
    return true;
    };
    win.isPrimitive = function(obj){
    var type = typeof obj;
    return type === 'string' || type === 'number' || type === 'boolean';
    };
    //HTMLElement
    win.isElement = function(obj){
    return obj ? obj.nodeType === 1 : false;
    };
    //TextNode
    win.isTextNode = function(obj){
    return obj ? obj.nodeName === "#text" : false;
    };
    win.isIterable = function(obj){
    return (obj && typeof obj !== 'string') ? obj.length !== undefined : false;
    };
    win.isDefined = function(obj){
    return typeof obj !== 'undefined';
    };
    win.error = function(msg) {
    throw new Error(msg);
    };
    win.now = function() {
    return (new Date()).getTime();
    };
    win.print = function(value) {
    document.write(value);
    };
    win.println = function(value) {
    print(value);
    document.write("
    ");
    };
    win.each = function(object, callback, args) {
    var name, i = 0,
    length = object.length,
    isObj = (length === undefined || isFunction(object));
    if (args) {
    if (isObj) {
    for (name in object) {
    if (callback.apply(object[name], args) === false) {
    break;
    }
    }
    } else {
    for (; i < length;) {
    if (callback.apply(object[i++], args) === false) {
    break;
    }
    }
    }
    } else {
    if (isObj) {
    for (name in object) {
    if (callback.call(object[name], name, object[name]) === false) {
    break;
    }
    }
    } else {
    for (; i < length;) {
    if (callback.call(object[i], i, object[i++]) === false) {
    break;
    }
    }
    }
    }
    return object;
    };
    win.Array.prototype.toString = function(){
    return "[" + this.join() + "]"
    }
    win.extend = function() {
    var options,
    name,
    src,
    copy,
    copyIsArray,
    clone,
    target = arguments[0] || {},
    i = 1,
    length = arguments.length,
    deep = false;
    // Handle a deep copy situation
    if ( typeof target === "boolean" ) {
    deep = target;
    target = arguments[1] || {};
    // skip the boolean and the target
    i = 2;
    }
    // Handle case when target is a string or something (possible in deep copy)
    if ( typeof target !== "object" && !isFunction(target) ) {
    target = {};
    }
    // extend jQuery itself if only one argument is passed
    if ( length === i ) {
    target = this;
    --i;
    }
    for ( ; i < length; i++ ) {
    // Only deal with non-null/undefined values
    if ( (options = arguments[ i ]) != null ) {
    // Extend the base object
    for ( name in options ) {
    src = target[ name ];
    copy = options[ name ];
    // Prevent never-ending loop
    if ( target === copy ) {
    continue;
    }
    // Recurse if we're merging plain objects or arrays
    if ( deep && copy && ( isPlainObject(copy) || (copyIsArray = isArray(copy)) ) ) {
    if ( copyIsArray ) {
    copyIsArray = false;
    clone = src && isArray(src) ? src : [];
    } else {
    clone = src && isPlainObject(src) ? src : {};
    }
    // Never move original objects, clone them
    target[ name ] = extend( deep, clone, copy );
    // Don't bring in undefined values
    } else if ( copy !== undefined ) {
    target[ name ] = copy;
    }
    }
    }
    }
    // Return the modified object
    return target;
    };
    })(window);

    如果我們不用extend方法,可以象下面的方式寫自己的組件:
    代碼如下:
    (function(win){
    win.StringBuffer = function(){
    this.datas = [];
    }
    var proto = StringBuffer.prototype;
    proto.append = function(value){
    this.datas.push(value);
    },
    proto.toString = function(){
    return this.datas.join("");
    }
    })(window);

    如果使用extend方法,可以象下面這樣寫組件:
    代碼如下:
    (function(win){
    win.extend(win,{
    StringBuilder : function(){
    this.datas = [];
    }
    });
    win.extend(StringBuilder.prototype, {
    append : function(value){
    this.datas.push(value);
    },
    toString : function(){
    return this.datas.join("");
    }
    });
    })(window);

    兩種方法的效果一樣,但是extend方法還可以做更多事件,比如插件式開發,跟第二種方式很象。
    當然,如果你本來就想寫jQuery插件,那就直接用jQuery的extend就可以啦。

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    寫自已的js類庫需要的核心代碼_js面向對象

    寫自已的js類庫需要的核心代碼_js面向對象: 代碼如下: (function(win) { var toString = Object.prototype.toString; var hasOwn = Object.prototype.hasOwnProperty; var class2type = {}; class2type[[object Boolean]] = boolean; c
    推薦度:
    標簽: js 代碼 對象
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 精品无码一区二区三区亚洲桃色| 国产精品亚洲日韩欧美色窝窝色欲| 亚洲国产精品VA在线看黑人| 国产精品成人观看视频| 久久精品国产亚洲av麻豆小说| 精品国产亚洲男女在线线电影 | 日韩精品无码一区二区三区不卡| 国产精品天干天干在线综合 | 2022精品天堂在线视频| 亚洲精品白浆高清久久久久久| 国产午夜精品一本在线观看 | 亚洲国产成人精品无码久久久久久综合| 久久99热精品| 国产精品成人啪精品视频免费| 国产精品无码久久久久| 国内精品久久久久久野外| 精品国产乱码一区二区三区| 宅男在线国产精品无码| 久久久久久国产精品美女| 国产精品视频全国免费观看| 久久国产精品成人免费| 成人区人妻精品一区二区不卡视频| 亚洲一区精品无码| 日韩在线精品一二三区| 九九线精品视频在线观看| 国产韩国精品一区二区三区| 亚洲国产精品欧美日韩一区二区| 91精品国产高清久久久久久io| 欧美精品黑人粗大免费| 亚洲欧洲成人精品香蕉网| 亚洲AV无码乱码精品国产 | 久久久久人妻一区精品果冻| 国产精品成人小电影在线观看| 6080亚洲精品午夜福利| 免费欧美精品a在线| 精品国产日产一区二区三区| 91老司机深夜福利精品视频在线观看| 精品午夜福利在线观看| 国产精品伦一区二区三级视频| 国产精品区一区二区三在线播放| 精品蜜臀久久久久99网站|