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);
        }
    }
    
  • 相关阅读:
    让程序用自定义的菜单自定义菜单AVKON_VIEW,CBA,MENU_BAR,MENU_PANE
    symbian 菜单不显示的原因
    子类中调用父类的带参数的构造函数|子类构造函数调用父类构造函数 的说明
    symbian 设置 透明背景
    IOS App资源路径
    Nonblock I/O 及其使用
    CEikStatusPane MakeVisible kernexec 3错误
    把mapinfo图层的经纬度信息导出来的办法
    解决安装macports,不能更新的问题
    jpg结构解析
  • 原文地址:https://www.cnblogs.com/freesfu/p/10113434.html
Copyright © 2011-2022 走看看