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