type方法的封装

type方法的封装

记一次type()方法的封装。要求能够判断出包装类。
首先我的思路是把对象和其他类型区分开来,因为实际上其他的数据类型都很好判断,使用Object.prototype.toString.call()就可以了。
在完成的过程中我出现了不少错误。
1.在对封装类进行判断时,我使用的是Object.constructor与所判断数据的constructor来进行比较的,到现在我也不知道是不是对的,但是我知道这个很不好的,因为Object.constructornative code(本地代码)
2.试图对Object.prototype.toString.call()使用简写名称时,我是这样写的

    toString = Object.prototype.toString.call() // one
    toString = Object.prototype.toString.call // two

不得不说都是糟糕的写法,特别是第一种,我只想引用这个toString方法,而加上一个小括号的话就是执行了,这是错的最离谱的。
至于two看起来的话好像好了一点,但是实际上还是错误的,只是去除了那个低端的错误,但是实际上我想使用的是Object的原型中的toString这个方法,而如果我向two那样写了的话,这个意思就是我将要调用的是那个toString对象(在JavaScript中一切都是对象嘛)中的call方法了
3.至于还有其他的错误那真是数不胜数了啊,但是我有点印象的错误就是以上那几个了,还有把实现代码贴在这里。
供以后鞭尸。。。。。?
4.还有一点要补充的。就是我一直以为对象原型的__proto__两边是一个下划线(话说我记得应该是没错的呀,难道是因为chrome更新了),然而这次用的时候发现实际上两边都是两个下划线。。。。

Object.prototype.type = function(obj) {
                obj = (arguments.length === 0) ? this : obj;
                //包装类不一样是对象么
                toString = Object.prototype.toString;
                console.log(toString.call(obj));
                if(typeof(obj) === "object") {
                    return (obj.__proto__ === Object.prototype) ? "[object Object]" : `new ${toString.call(obj)}`;
                }
                else {
                    return toString.call(obj);
                }
            }
posted @ 2018-12-13 13:19 秦晓 阅读( ...) 评论( ...) 编辑 收藏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值