您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

JS的clone()函数如何使用

2024/3/17 16:18:45发布23次查看
这次给大家带来js的clone()函数如何使用,使用js的clone()函数注意事项有哪些,下面就是实战案例,一起来看一下。
一、解题代码
直接贴代码,
function clone(obj){            var copy;            switch(typeof obj){                case 'undefined':break;                case 'number':                case 'string':                case 'boolean':                case 'function':copy = obj;break;                case 'object':                    if(obj == null) copy = null;                    else if(tostring.call(obj) === '[object array]')                     {                         copy = [];                        for(var i in obj) copy.push(clone(obj[i]));                     }                    else if(tostring.call(obj) === '[object regexp]')                     {                         copy = obj;                     }                    else                      {                         copy = {};                        for(var j in obj)                             copy[j]= clone(obj[j]);                     }             }            return copy;         }        var a=undefined;        var b=1;        var c=hello;        var d=true;        var add=function(a,b){            return a+b;         }        var e=null;        var f=[1,2,3];        var g=/^\s+/;        var h={             a:1,             b:2         }         console.log(typeof clone(a));         console.log(typeof clone(b));         console.log(typeof clone(c));         console.log(typeof clone(d));         console.log(clone(add)(1,2));         console.log(object.prototype.tostring.call(clone(e)));         console.log(object.prototype.tostring.call(clone(f)));         console.log(object.prototype.tostring.call(clone(g)));         console.log(object.prototype.tostring.call(clone(h)));
结果:
二、疑问一开始看到这个问题的时候,就想到typeof [1,2,3]的结果是,这可怎么办,正则表达式,null,object的typeof都是。看上面的代码,是用object.prototype.tostring.call(obj)或者tostring.call(obj)来解决的。
那为什么不直接用obj.tostring()呢?我们先来看看obj.tostring()会输出什么?
null和undefined居然出错了,这是肯定的,因为tostring()不可完成null和undefined的转型,用string()才可以
若string()转换的不是null或者undefined,则自动转换为tostring().扯远了。。我们说回正题
那么用object.prototype.tostring.call(obj)的结果是什么呢?
居然不一样,这是怎么回事?
原来,虽然array,null等类型虽然是object的实例,但是他们各自都重写了tostring()方法,我们试着来验证一下:
var arr=[1,2,3]; console.log(array.prototype.hasownproperty(tostring));//判断原型中是否有tostring()方法console.log(arr.tostring());delete array.prototype.tostring;//删除array原型里面重写的tostringconsole.log(array.prototype.hasownproperty(tostring)); console.log(arr.tostring());
结果:
很明显真的被改写了。
相信看了本文案例你已经掌握了方法,更多精彩请关注其它相关文章!
推荐阅读:
text-align如何实现两端对齐
mac系统里mysql重置root密码
以上就是js的clone()函数如何使用的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product