JavaScript怎么实现基础类型和对象一样有属性和方法
本篇文章给大家带来了关于javascript的相关知识,其中主要介绍了关于基础类型和对象一样有属性和方法的相关问题,包括了基础类型当做对象使用以及基础类型构造函数等等,下面一起来看一下,希望对大家有帮助。
【相关推荐:javascript视频教程、web前端】
基础类型的“属性方法”
前言
在其他面向对象的编程语言中,例如Java
、C++
,属性是对象的独有概念,基础类型就是基础类型,是不存在属性方法概念的。
没错,又是JavaScript
的馊主意,其引擎允许我们像操作对象一样使用属性方法操作基础类型的数据。
在讲解这个奇怪的特性之前,我们要先明确基础类型和对象类型之间的差别是什么?
- 何为基础类型
JavaScript
基础类型中的中一种值;JavaScript
中存在7
种基础类型,分别是:String
、Number
、Boolean
、BigInt
、Symbol
、null
和undefined
;
- 何为对象类型
- 一个数据包,使用
{ }
创建,能存储多个值; JavaScript
还有其他类型的对象,例如函数;
- 一个数据包,使用
面向对象中会涉及,引入对象的一个关键特性是封装,它可以把各种乱七八糟的数据、方法统一的存储在一个对象中,从而降低使用的复杂性。
例如:
let user = { name : "xiaoming", hello() { console.log(`你好,我是${this.name}`); }}user.hello();
我们把对象user
的属性和方法封装成了一个对象,这样在使用的时候就非常简单,我们只需要使用obj.attr
的方式就能调用方法或者属性。
但是,这么做是由额外的开销的(面向对象有额外的开销),这也是面向对象的语言C++
相比于C
慢的地方。
基础类型当作对象使用
面临的问题
基础类型作为对象使用存在两个难以调和的问题:
- 我们希望对基础类型的操作可以像使用对象一样,例如
"abc".toUpperCase()
; - 对象有额外开销,我们又希望保持基础类型的简单、高效特性;
解决的方法
JavaScript
解决以上问题的方式相当的“和稀泥”:
- 基础类型就是基础类型,提供独立的、单个的值;
- 允许访问
String
、Number
、Boolean
和Symbol
类型的方法和属性; - 为了保证理论的完整,在使用基础类型的方法和属性时,先将其包装成对象,随后在销毁;