概念

为什么要有对象?

如果有一组相关的数据,松散的储存不利于使用,存入数组中受下标限制有必须有固定的顺序,而对象可以自定义名称存储一系列无序的相关数据。

什么是对象?

现实生活中的对象:万物皆对象,对象是一个具体的事物,一个具体的事物就会有行为和特征。
举例:一部车
车市一类事物,门口停的那辆车才是对象
特征:红色,四个轮子
行为:驾驶、刹车

JavaScript中的对象

JavaScript中的对象其实就是生活中大型的一个抽象
JavaScript的对象是无序属性的集合
其属性可以包含基本值、对象或函数、对象急速一组没有顺序得知。 我们可以把JavaScript中的对象想象成键值对,其中值可以是数据和函数。
对象的行为和特征
特征——在对象中用属性表示
行为——在对象中用函数表示

对象字面量

创建一个对象最简单的方式是使用对象字面量赋值给变量。类型数组。
对象字面量语法:{}
内部可以存放多条数据,数据与数据之间用逗号分隔,最后一个后面不要加逗号。
每条数据都是有属性名和属性值组成,键值对写法:k:v
k:属性名
v;属性值,可以是任意类型的数据,比如简单类型数据、函数、对象。

  1. <script>
  2. var App = {
  3. name: "手机",
  4. color: "白色",
  5. game: "听音乐",
  6. info: function () {
  7. console.log(123);
  8. console.log(this);
  9. console.log(this.game);
  10. }
  11. }
  12. console.log(App.name)
  13. console.log(App["color"])
  14. App["info"]()
  15. // 删除属性;
  16. delete App.color
  17. // 新增属性;
  18. App.sm = 10086
  19. // 修改属性;
  20. App.color = "红色"
  21. </script>

区分属性和方法

属性:对象的描述性特征,一般是名词,相当于定义在对象内部的变量。
方法:对象的行为和功能,一般是动词,定义在对象中的函数。

调用对象内不熟悉和方法的语法

用对象的变量名打点调用某个属性名,得到属性值。
在对象内部用this打点调用属性名。this替代对象。
用对象的变量名后面加[]调用,[]内部是字符串格式的属性名。
调用方法是时,需要在方法名后加()执行。

更改对象内部属性和方法的语法

更改属性的属性值方法为:先调用属性,在等号赋值、
o.age=19;
增加新的属性值和属性值:使用点语法或者[]方法直接定义新属性,等号赋值
o.height=180;
删除一条属性;使用一个delete关键字,空格后面加属性调用。
delete o.sex;

其他创建对象的方式

new Object()创建对象

object()构造函数,是一种特殊的函数。 主要用来在创建对象时初始化对象,即为对象成员变量赋初始化值,总与new运算符一起使用在创建对象的语句中
1.构造函数用于创建一类对象,首字母要大写。
2.构造函数要和new一起使用才有意义

  1. <script>
  2. //利用new Object创建对象
  3. var obj = new object(); // 创建了一个空的对象
  4. obj.uname ='张三疯';
  5. obj.age = 18;
  6. obj.sex ='男';
  7. obj.sayHi = function() {
  8. console.log( 'hi~');
  9. }
  10. // (1)我们是利用等号=赋值的方法 添加对象的 属性和方法
  11. // (2)每个属性和方法之间用 分号 结束
  12. console.log(obj.uname);
  13. console.log(obj[ 'sex']);
  14. obj.sayHi();
  15. </script>

new在执行时会做四件事情

1.new会在内存中创建一个新的空对象
2.new会让this指向这个新的对象
3.执行构造函数目的:给这个新对象加属性和方法
4.new会返回这个新对象
image.png

工厂函数创建对象

如果要创建多个类型的对象,可以将new Object()过程封装到一个函数中,将来调用函数u就能创建一个对象,相当于一个生产对象的函数工厂,用来简化代码

  1. <script>
  2. // 使用工厂方法创建对象
  3. function aaa(name,age,color){
  4. var bbb=new Object;
  5. bbb.name=name;
  6. bbb.age=age;
  7. bbb.color=color;
  8. return bbb;
  9. }
  10. var a=aaa("小红","21","pink");
  11. var b=aaa("小于","20","white");
  12. console.log(a);
  13. console.log(b);
  14. </script>

自定义构造函数创建对象

比工厂方法更简单。
自定义一个创建具体对象的构造函数, 函数内部不需要new一个构造函数的过程,直接使用this代替对象进行属性和方法的书写,也不需要return一个返回值。
使用时,利用new关键字调用自定义的构造函数即可。
注意:构造函数的函数名首字母需要大写,区别于其他普通函数名
自定义构造函数案例

  1. <script>
  2. //利用构造函数创建对象
  3. //我们需要创建四大天王的对象︰相同的属性:名字年龄性别﹐相同的方法:唱歌//构造函数的语法格式
  4. // function构造函数名(){
  5. // this.属性=值;
  6. // this.方法= function(){}
  7. // }
  8. // new构造函数名();
  9. // 1.构造函数名字首字母要大写
  10. // 2.我们构造函数不需要return就可以返回结果
  11. // 3.我们调用构造函数必须使用new
  12. // 4.我们只要new Star()调用函数就创建一个对象 ldh
  13. function Star(uname, age, sex){
  14. this.name = uname;
  15. this.age = age;
  16. this.sex = sex;
  17. this.sing = function(sang) {
  18. console.log(sang);
  19. }
  20. }
  21. var ldh = new Star('刘德华', 18,"男");
  22. console.log(typeof ldh);
  23. console.log( ldh.name);
  24. console.log( ldh['sex']);
  25. ldh.sing( '冰雨');
  26. var zxy = new Star('张学友',19,"男");
  27. console.log(zxy.name);
  28. console.log(zxy.age);
  29. </script>

对象遍历

for in循环也是循环的一种,专门用来遍历对象,内部会定义一个k变量,k变量在每次循环时会从第一个开始接受属性名,一直接收到最后一条属性名,执行完全后跳出循环。
简单的玄幻遍历:输出每一项的属性名和属性值。
//循环遍历输出每一项

  1. <script>
  2. for(var k in obj){
  3. console.log(K+"项的属性值是:"+obj[k]);
  4. }
  5. //遍历对象
  6. var obj = {
  7. name: 'pink老师',
  8. age: 18,
  9. sex:'男',
  10. fn:function(){
  11. }
  12. }
  13. // console.log(obj.name);
  14. // console.log(obj.age);
  15. // console.log(obj.sex);
  16. // for in遍历我们的对象ll for(变量 in对象){}
  17. for (var k in obj) {
  18. console.log(k);
  19. // k变量输出得到的是属性名
  20. console.log(obj[k]);
  21. }
  22. // obj[k]得到是属性值
  23. </script>

简单类型和复杂类型

掌握简单类型和复杂类型的区别

简单类型和复杂类型的区别
我们已将学习过简单类型数据和一些复杂类型的数据,现在来看一下他们之间的区别有哪些
基本数据类型又叫值类型,复杂类型又叫做引用类型
值类型:
简单数据类型,基本数据类型,在存储时变量中存储的是值本身,因此叫做值类型。
引用类型:
复杂数据类型,在存储时,变量中存储的仅仅是地址(地址),因此叫做引用数据类型

堆跟栈

JavaScript中没有堆和栈的概念, 此处我们用堆和栈来讲解,目的是方便理解和方便以后的学习
堆跟栈空间分配区别:
1.栈(操作系统):由错做系统自动分配释放,存放函数的参考值,局部变量的值。
2.堆(操作系统):存储复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收

基本类型在内存中 的存储

变量中如果存储的是简单类型 的数据,那么变量中存储的是值本身,如果讲变量赋值给另一个变量,是将内部的值复制给另一个变量,两个变量之间没有联系,一个变化,另一个不会同时变化。

基本 类型座位函数的参数

基本类型的数据作为函数的参数,符合基本类型 的数据特点。

复杂类型在内存中的存储

如果讲复杂类型的数据赋值给一个变量,复杂类型的数据会在内存中创建一个原型,而变量中存储的是指向对象的一个地址,如果将变量赋值给另一个变量,相当于将地址赋值一份给了新的变量,两个变量的地址相同,指向的是同一个原型,不论通过那个地址更改了原型,都是原型上发生的更改,两个变量下次访问时,都会发生变化。