对象和包装类

对象和包装类

对象和包装类

上面代码也可以这样写

对象和包装类

对于一个对象来说,肯定要有增删改查

首先来看增:

对象和包装类

对象和包装类

再看查看:

对象和包装类

对象和包装类

在看改:

对象和包装类

对象和包装类

再看删

对象和包装类

对象和包装类

对象的创建方法:

1,var obj = {}   ,plainObject  对象字面量,对象直接量

对象和包装类

2,构造函数

(1)系统自带的构造函数  Object()

对象和包装类

对象和包装类

js的构造函数可以后天更改对象属性

(2)自定义

对象和包装类

符合大驼峰式命名规则// TheFirstName

对象和包装类

对象和包装类

可以从共同的函数中继承共同的属性,并且各不影响

对象和包装类

对象和包装类

对象和包装类

对象和包装类

 

对象和包装类

构造函数的原理:

var student = new Student('zhangsan', 18, 'male');

1,在函数体最前面隐式的加上this = {}

在你使用过new之后,原本函数内部的最前会加上var this = {};

对象和包装类

2,执行this.xxx = xxx;

3,隐式的返回this

对象和包装类

看下面:

对象和包装类

对象和包装类

如果我们现在自己返回对象

对象和包装类

对象和包装类

就会返回空对象

现在我们返回一个原始值:

对象和包装类

对象和包装类

发现没什么作用,这是因为在你new了之后,就只能返回对象了,返回原始值的语句没有什么效果

如果我们自定义this对象

对象和包装类

对象和包装类

-------------------------------------------------------------------------------------------------------------------------

我们再来看包装类

对象和包装类

对象和包装类

变成了对象 123

对象和包装类

那么他还能不能有和数字的运算呢?,答案是可以的

对象和包装类

但是要记得哦,乘过数字之后,原本的对象就变成了数字

对于字符串和布尔也是一样的

对象和包装类

undefined和null不能设置属性

总结一下:比如数字(string和booleant同理),数字有原始值数字和对象数字,原始值数字不能有对象和方法,对象能有对象和自己的方法

那么看下面的:

对象和包装类

对象和包装类

再看下面的:

对象和包装类

对象和包装类

发现没有报错,原因是经过了一个包装类的过程

对象和包装类

对象和包装类

在这个过程中,首先声明了一个原始值,然后我们为其添加了一个方法,这本来是不正确的,但是系统为我们隐式调用了Number()方法,将他变成了一个对象,并添加了len属性赋值为3,随即系统就调用delete方法,将对象删除(可以这样理解,你使用了一个错误的方法,但是系统不忍心提醒你,为你将num变成了对象而且添加了len属性,但是系统知道原始值不能有属性,于是就将len删除了),但是我们又自己调用了len属性,这个时候系统说,兄弟你这不行啊,不涨记性,但是系统任然不想提醒你,于是又new了number对象(但是这个和刚才那个number对象不是一个),再去访问len,在一个对象里访问未经声明的变量,系统会返回undefined

那么现在看下面的问题:

对象和包装类

我们发现length有截断字符串的作用,再看

对象和包装类

看看会是多少?ab?不是,abcd

对象和包装类

对象和包装类

对象和包装类

对象和包装类

记住.length是对象str的属性,如果我们访问str.length,系统会为我们new 一个String对象,里面存的是abcd,然后调用.length方法再返回str的长度

在看下面的:

对象和包装类

对象和包装类