首页 > 其他 > 详细

type方法的封装

时间:2018-12-13 13:40:26      阅读:165      评论:0      收藏:0      [点我收藏+]

记一次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);
                }
            }

type方法的封装

原文:https://www.cnblogs.com/freesfu/p/10113434.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!