网站首页 » 前端开发 » JavaScript » JavaScript 中的包装对象
上一篇:
下一篇:

JavaScript 中的包装对象

请看下面这几行代码:

var str = "yunkus";
str.length
str.charAt(0);
str.toUpperCase();
console.log( typeof str );

相信像上面这样写,你肯定不会觉得奇怪,因为平时你也是这么使用的。但如果你仔细想一想,心里就会有一个疑惑:为什么基本类型也有属性和方法,这不是对象的专利吗?我们都知道 str 是一个字符串类型,也就是基本类型,为什么还会有属性和方法,它是通过什么方式实现的?

没错就是通过包装对象来实现的,基本类型都会有对应的包装对象:字符串、数字和布尔值都有对应的包装对象(String、Number、Boolean),null 和 undefined 除外。

我们可以通过这些包装对象来创建并使用对应的属性和方法,比如:

var str = new String("yunkus");
console.log(str.charAt(0));

所在上面说到的基本类型的属性和方法都是挂载到它们各自对应的包装对象原型上,如下:

String.prototype.charAt = function(){}

当我们这样创建一个字符串var str = "yunkus";并且调用方法charAt(0);时,这个基本类型会找到对应的包装对象类型,包装对象把所有的属性和方法给了基本类型,然后包装对象消失。

所以当我们需要给这些基本类型添加属性或者方法时我们需要把这些属性和方法挂载到包装对象的原型上,比如:

var str = "yunkus";
String.prototype.showChineseName = function(){
    return "云库网";
}
console.log(str.showChineseName());

而不能直接给 str 添加属性或者方法:

var str = "yunkus";
str.color ="blue";
console.log(str.color); // undefined
str.showChineseName = function(){}; //undefined

当你给 str 这个基本类型添加完 color 属性(str.color ="blue";)后对应的包装对象消失了,然后当你再次调用这个属性(console.log(str.color))时会重新再创建一个包装对象,而新的包装对象里并没有这个属性,所以就会返回 undefined ,给str 添加方法也是同样的道理。

  • 微信扫一扫,赏我

  • 支付宝扫一扫,赏我

声明

原创文章,不经本站同意,不得以任何形式转载,如有不便,请多多包涵!

本文永久链接:http://yunkus.com/javascript-package-object/

发表评论

电子邮件地址不会被公开。 必填项已用*标注

评论 END