• 为什么 JavaScript 中基本数据类型拥有 toString 之类方法?


            

     

            在 JavaSctipt 启示录一书中,关于为什么 JS 中基本数据类型可以调用一堆对象方法。大意即指,当原始数据类型(boolean,Number、String)在调用方法时,JS 将会创建对象,以便调用方法属性,而在使用完毕后将会销毁该对象。

               原始值被当作构造函数创建的一个对象来使用时, JS 会将其转换为一个对象,以便其可以使用对象的特性(如方法),而后抛弃对象性质,并将它变回到原始值。

          

    var  str="测试";
    console.dir(str);
    console.log(typeof(str));
    
    var str1=new String("测试");
    console.dir(str1);
    console.log(typeof(str1));
    
    // 首先,定义两个变量,一个就是普通的基本类型 string 变量,一个是以 String 构造函数创建的对象
    // 通过 typeof 运算符,基本类型返回 "string",而对象类型则返回 "object"
    // 同样,通过 console.dir 命令可看出,基本类型与对象类型差别

       

         而前面内容提到,当基本类型调用方法(.属性)时候,是已经临时转换成了对象类型,而使用完毕后,将会销毁该对象。如果学过 Java 的话,也很容易明白这个道理,Java 中也存在包将类型与基本类型,原理一样。 

       

    var str="测试";
    
    String.prototype.returnThis=function(){
    
      debugger;
    
      console.dir(this);
    
      console.log(typeof(this));
    
    };

    str.returnThis();
    // 为 String 的 prototype 增加一个新方法,方法体中即详细列出 this (了解原型的都清楚,此时 this 即代表通过 String 以 构造函数所创建的对象。) //为了便于查看,在方法体中加入了 debugger ,以便详细观察。

     

     参考资料:

       http://www.cnblogs.com/SheilaSun/p/4765394.html#3256087

       http://www.cnblogs.com/zichi/ (原来在子迟某篇文章下看到这个回复,不记得链接了)

        

       

        

  • 相关阅读:
    Android Sensor Test
    [转]Android重力感应开发
    nexus5 root教程
    C# split字符串 依据1个或多个空格
    leetcode
    [ffmpeg 扩展第三方库编译系列] 关于须要用到cmake 创建 mingw32编译环境问题
    JAVA网络爬虫WebCollector深度解析——爬虫内核
    Apache htaccess 重写假设文件存在!
    javascript --- 事件托付
    LeetCode——Populating Next Right Pointers in Each Node II
  • 原文地址:https://www.cnblogs.com/Lumia1020/p/5321618.html
Copyright © 2020-2023  润新知