JavaScript--封装方法(一)

本文深入解析JavaScript中type类型检测、数组去重、深克隆及圣杯模式继承的实现原理与步骤,通过自定义函数增强语言功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JavaScript–封装方法(一)

1.type方法

function type(target) { 
     var ret = typeof (target); 
     var template = { 
     "[object Array]": "array", 
     "[object Object]": "object", 
     "[object Number]": "number - object", 
     "[object Boolean]": "boolean - object", 
     "[object String]": "string - object" 
     } 
     if (target === null) { 
     return "null"; 
     } else if (ret == "object") { 
     var str = Object.prototype.toString.call(target); 
     return template[str]; 
     } else { 
     return ret; 
     } }
    //步骤
    第一步:区分开是原始值还是引用值,如果是原始值就直接返回 typeof 结果,如果是引用值的话就再用 Object.prototype.toString.call 
    第二步:区分是数组还是对象还是包装类, var 一个对象把返回的结果存好,再 var 一个 str 等于 toSring 的返回结果,然后 return 的时候直接返回 template 对应的属性值
    有两点特殊的:null 是原始值,但是 typeof 的时候却把它归到 object 里了,我们单独把他摘出来即可;还有 function 是引用值,但是 typeof 后还是他,我们就把 function 和原始值写在一起,这样代码量能少点儿。

2.数组去重

  Array.prototype.unique = function () { 
     var temp = {}, 
     arr = [], 
     len = this.length; 
     for (var i = 0; i < len; i++){ 
     if(!temp[this[i]]){ 
     temp[this[i]] = "abc"; 
     arr.push(this[i]); 
     } 
     } 
     return arr; }

3.克隆

 function deepClone(origin, target) { 
     var target = target || {}, 
     toStr = Object.prototype.toString, 
     arrStr = "[object Array]"; 
     for (var prop in origin) { 
     if (origin.hasOwnProperty(prop)) { 
     if (origin[prop] !== "null" && typeof (origin[prop]) == "object"){ 
     if (toStr.call(origin[prop]) == arrStr) { 
     target[prop] = []; 
     } else { 
     target[prop] = {}; 
     } 
     deepClone(origin[prop], target[prop]); 
     } else { 
     target[prop] = origin[prop]; 
     } 
     } 
     } 
     return target; }
    //步骤:
    第一步:先用 for in 循环遍历对象,看看每一个属性是原始值还是引用值(用 typeof()判断,如果是引用值就返回 object,否则就是原始值),如果是原始值就直接拷贝。
    第二步:如果是引用值就看看是数组还是对象(建议使用 toString,另外两个instanceof 和 constructor 会有个跨父子域的问题,后期会讲到),如果是数组就建立空数组,如果是对象就建立空对象。
    第三步:把原来的引用值和要被拷贝的引用值当做一对新的克隆对象,然后再一次进行新的循环判断的步骤。(递归)

4.圣杯模式

  //通俗写法:
    function inherit(Target,Origin){ 
     function F(){}; 
     F.prototype = Origin.prototype; 
     Target.prototype = new F(); 
     Target.prototype.constructor = Target; 
     Target.prototype.uber = Origin.prototype; 
    }
    
    //YUI 库写法:
    var inherit = function () { 
     var f = function () {}; 
     return function (Target,Origin) { 
     F.prototype = Origin.prototype; 
     Target.prototype = new F(); 
     Target.prototype.constructor = Target; 
     Target.prototype.uber = Origin.prototype; 
     } 
    }())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值