对象与构造函数与包装类

咱们前面已经接触过对象这一种数据,这一篇着重介绍一下对象的有关知识哟~浏览器

 

对象建立方法

对象的建立方法有三种:函数

1.对象字面量this

咱们前面的对象建立方法都是使用的字面量的方法建立的。spa

这样的方式就叫作字面量,也是咱们建立对象最简单最经常使用的方法3d

对象里面有属性,属性之间用逗号分隔,每一条属性都有属性名和属性值,属性名和属性值之间用分号分隔。对象

2.构造函数blog

构造函数也分两种:系统自带的构造函数和咱们自定义的构造函数。字符串

• 系统自带的构造函数原型

建立对象的构造函数是Object()。console

经过这条语句,咱们就建立了一个空对象。

它的做用和var obj = {};的做用是同样的。

系统自带的构造函数还有不少,好比Number()、String()、Boolean()、Array()这些都是构造函数。

• 自定义构造函数

自定义的构造函数是咱们平时最经常使用的一种构造函数

构造函数也是正常的函数,咱们为了区分它和别的正常函数,把构造函数的首字母大写。

上面就声明了一个构造函数Person。

有了构造函数以后,咱们就能够用new操做符来建立对象了。

这样咱们也建立了一个对象oPerson,不过如今这个对象是空对象,由于咱们的构造函数什么都没有写,咱们也没有给这个对象添加任何属性。

另外,用new操做符建立出来的对象,尽管都是使用的同一个构造函数,可是之间是没有关联的。

person1 和 person2 之间没有关系,它们两个是单独的对象。

咱们能够在构造函数里面写一些对象天生就有的默认属性。

固然构造函数既然是函数,那么就能够传参数。

建立对象的时候,只有new才会有this

这里有一个重点,为何咱们经过new操做符能够建立互相独立的对象呢

其实,当咱们用new操做符的时候,这个new在咱们的构造函数里面隐式建立了一个this对象,而且最后返回了这个this对象,这也就是为何咱们经过new能够最后建立一个对象的缘由了。

若是咱们在构造函数首行手动建立一个对象,好比that对象,而后最后返回了that,那么里面的this就没有用了,我么要为属性赋值就要用that了。

这样默认的name值就是scarlett。

重点:若是咱们最后返回的对象,那么this就失效,可是若是最后显示返回的是原始值,那么this仍是有效的。

3.Object.create(原型)

这种方法涉及到原型的知识点了,咱们放在后面介绍原型的时候再介绍。

 

属性的增删改查

其实属性的修改咱们前面也都接触过了。

1.

咱们能够经过对象名+点+属性名的方法来给对象添加新的属性而且赋值。

这个时候若是咱们调用obj.age属性的话,这个属性并不存在,可是obj这个对象是存在的,所以浏览器不会报错,只会打印undefined。

2.

修改的操做和增长的操做实际上是同样的,只要调用相同的属性名而后赋一个新的值就能够了。

3.

其实咱们前面一直都在使用查看属性的功能…

obj.name = ‘demo’;

console.log(obj.name);//demo

这就是查看属性的方法。

4.

删除属性的操做咱们须要借助delete操做符,这个操做符的做用就是来删除属性的。

 

包装类

咱们前面提到过,原始值是不能够改变的,只有对象才有属性和方法,那么这个又是个什么东西?

按理说这个字符串原始值是没有属性的,可是这里确实能够查看length这个属性。

这里就涉及到一个叫作包装类的东西了。

咱们在调用执行这一行代码以前,程序会自动把str包装成一个字符串对象,在这一行代码执行完毕以后再销毁这个字符串对象。

这里的str.length的str实际上是上一句的包装好的str1,str1是对象,上面有属性和方法,而后就能够打印length属性了,在执行完str.length这行代码以后,str1这个对象就被销毁了。

这也就是为何咱们在执行str.length = 2;这句话以后,再打印str.length;仍是4的缘由了。

系统在执行str.length = 2这句话的时候,先建立了一个String对象,这个对象的值是‘abcd’,咱们改变的length实际上是这个隐式建立的对象的length值,并非改变了咱们的原始值str,当str.length = 2;这句代码执行完以后,隐式建立的字符串对象就被销毁了,因此咱们后面打印的str.length仍是4。

其余类型的数据也是同样的,当咱们给原始值加属性的时候,都是先隐式包装成对象,而后赋完属性值以后再销毁这个对象。

相关文章
相关标签/搜索