在 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/ (原来在子迟某篇文章下看到这个回复,不记得链接了)

最新文章

  1. 伪Textatea的构建(div+table),以及相应的滚动条问题与safari上的优化
  2. monitor disk
  3. vector在C++中的基本用法
  4. php基础19:文件
  5. angularjs 1.3 综合学习 (one way bind , ng-if , ng-switch , ng-messages, ng-form ,ng-model )
  6. eclipse配置svn方法
  7. AngularJS1.X学习笔记12-Ajax
  8. 解决fatal error LNK1168的终极方法
  9. python高级编程1
  10. Django—第三方引用
  11. python3中报错AttributeError: module 'sys' has no attribute 'setdefaultencoding'
  12. H5兼容问题及解决方法
  13. sublime-代码提示
  14. 解决win10系统无法安装.NET Framework 3.5
  15. Jmeter(三十三)_JsonPath表达式提取响应
  16. “耐撕团队”部署并测试onezero团队记帐本项目
  17. P3366 【模板】最小生成树(boruvka/sollin)
  18. Dedecms当前位置{dede:field name='position'/}修改,去掉>方法
  19. 【C++】深度探索C++对象模型读书笔记--关于对象(Object Lessons)
  20. laravel4.2 Redis 使用

热门文章

  1. sql2005主从数据库同步配置
  2. PHP运行模式的深入理解
  3. Eclipse @override报错解决 必须覆盖超类方法
  4. 给你一个承诺 - 玩转 AngularJS 的 Promise(转)
  5. hdu 4300(kmp)
  6. [转] ArcEngine 产生专题图
  7. redis学习笔记之pipeline
  8. Period(KMP,循环节问题)
  9. DbHelper第三版, 数据库通吃
  10. IOS-day03_OC中的get和set