zoukankan      html  css  js  c++  java
  • 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);
        }
    }
    
  • 相关阅读:
    Android网络编程要学的东西与Http协议学习
    数据存储与访问之——初见SQLite数据库
    ViewPager基础入门
    调用android方法,出现版本太低解决方法
    Android Studio 代码自动提示无效
    策略模式
    C#通过SendARP()获取WinCE设备的Mac网卡物理地址
    简单理解和使用 C# 委托与事件
    Oracle SQL developer客户端 如何连接已经安装完毕的Oracle服务器端
    源码分析之Map(二)HashCode详解
  • 原文地址:https://www.cnblogs.com/freesfu/p/10113434.html
Copyright © 2011-2022 走看看