目录
[3: 读取对象中的属性](#3: 读取对象中的属性)
[4: 修改对象的属性值](#4: 修改对象的属性值)
[5: 删除对象的属性](#5: 删除对象的属性)
[第一种方式 创建一个构造函数对象](#第一种方式 创建一个构造函数对象)
[第二种方式 使用函数声明来创建一个函数(常用)](#第二种方式 使用函数声明来创建一个函数(常用))
[第三种方式 匿名函数 使用函数表达式来创建一个函数](#第三种方式 匿名函数 使用函数表达式来创建一个函数)
什么是对象?
在现实生活中,万物皆对象,对象是一个具体的事物,看得见摸得着的实物。例如一本书,一辆汽车,一个人可以是"对象",一个数据库,一张网页,一个与远程服务器的连接也可以是"对象"。
**在JS里,对象是一组无序的相关属性和方法的集合,**所有的实物都是对象,例如字符串、数值、数组、函数等
例如:按钮
属性:大小,背景色,字体颜色,圆角
方式:点击跳转
对象的意义
保存一个值时,可以使用变量
保存多个值(一组值)时,可以使用数组。但数组元素之间信息不连贯,无连接,表达不清楚
对象的目的:是为了保存一组 无序的相关 的数据
JS中的对象表达结构更清晰,更强大。
例如:保存一个人完整的信息
对象的分类
对象属于一种复合的数据类型,在对象中可以保存多个不同数据类型的属性,让信息与信息之间有联系,关系明确,操作起来也更加方便(能使用一些对象才能用的属性方法)
1.内建(置)对象--有ES标准中定义的对象,在任何的ES的实现中都可以使用,eg:Math String Boolean function object,Array······
2:宿主对象--由JS的运行环境提供的对象,目前来讲,主要指浏览器提供的对象,eg:BOM(浏览器对象模型) DOM(文档对象模型) 两组对象,里面各自都有很多
3:自定义对象--由开发人员创建的对象
对象的基本操作
1:创建对象
使用new关键字调用的构造函数,创建对象obj
使用typeof检查
2:向对象添加属性
语法1:对象.属性名=属性值;
需求:在对象obj中添加name,gender,age属性
语法2:对象[属性名]=属性值;
注意:一般情况用语法1即可,在属性名为变量,数字,特殊字符时只能用语法2
3: 读取对象中的属性
语法:对象.属性名
如果读取对象中没有的属性,不会报错,而会返回undefined
需求:输出对象obj的name属性
javascript
let per = new Object();
per.age = 18;
per.name = "jack";
per.height = 180;
// 读取对象中的属性
console.log(per.age);
console.log(per.sex); //读取对象没有的属性,并不会报错,返回undefined
console.log(per['@123']);

4: 修改对象的属性值
语法:对象.属性名=新值
需求:修改对象的name属性为'jack'
javascript
// 修改对象的属性值;
// 如果修改的是对象有的属性,就是修改,修改的是对象没有的属性,就是新增
per.age = 20; //修改
per.sex = "男"; //新增
per["@123"] = 456;
5: 删除对象的属性
语法:delete 对象.属性名
需求:删除对象obj的年龄属性
javascript
// 删除对象的属性
// delete per.sex;
// delete per.age
delete per["@123"];
对象的属性值与属性名
1、属性名:
对象的属性名不强制性要求遵守标识符号的规范,什么名字都可以使用,但是我们使用还是尽量按照标识符的规范去做
如果要使用特殊的属性名 ,例如数字,不能采用"."的方式来操作需要使用另一种方式'[]':
语法:对象["属性名"]=属性值
读取时也需要采用这种方式
使用[]这种形式去操作属性,更加灵活,
在[]中可以直接传递一个变量,这样变量值是多少就会读哪个属性
2、属性值
JS对象的属性值,可以是任意的数据类型,甚至可以是对象
javascript
obj.test = true;
obj.test = undefined;
obj.test = "true";
obj.test = 123;
// 创建一个对象
var obj2 = new Object();
obj2.name = "猪八戒";
obj.test = obj2;
3、in运算符
通过该运算符可以检查一个对象中是否含有指定的属性
如果有则返回true,没有则返回false
语法:"属性名" in 对象
什么是函数?
在JS里面,可能会定义非常多的相同代码或者功能相似的代码,这些代码需要大量重复使用
函数: 就是封装一段可被重复调用执行的代码块。通过代码块可以实现在需要的的重复使用,使用typeof检查一个函数对象时,会返回function
函数的封装是把一个或者多个功能通过函数的方式封装起来,对外只提供一个简单的函数接口,简单理解:将很多衣服打包到一个行李箱,jQuery就是一个函数封装库,对外暴露一个顶级对象$
函数的使用
函数在使用时分为两步:声明函数和调用函数
声明函数有三种:
第一种方式 创建一个构造函数对象
我们在实际开发中很少使用构造函数来创建一个函数对象
可以将要封装的代码以字符串的形式传递给构造函数
封装到函数中的代码不会立即执行,函数中的代码会在函数调用的时候执行
javascript
var fun = new Function("console.log('hello 这是我的第一个函数')");
console.log(typeof fun);//function
fun();
第二种方式 使用函数声明来创建一个函数(常用)
语法:
javascript
function 函数名([形参1,形参2,形参3,形参4....形参n]){
执行语句.....
}
javascript
function fun2() {
console.log("这是我的第二个函数~~~");
alert("hahahaha");
document.write("wuwuwuwu");
}
第三种方式 匿名函数 使用函数表达式来创建一个函数
语法:
javascript
var 变量名=function([形参1,形参2...形参n]){
语句.....
}
javascript
var fun3 = function () {
console.log("我是匿名函数中的封装的代码");
}; //相当于赋值语句
fun3(); //调用函数
注意:
由于函数一般是为了实现某个功能才定义的,所以通常我们将函数名命名为动词,例如getsum
调用函数
调用函数语法:变量名/函数名()
当调用函数时,函数中封装的代码会按照顺序执行
函数的参数
在声明函数时,可以在函数名称后面的小括号里添加一些参数,这些参数是形参,而在调用该函数时,同样也需要传递相应的参数,这些参数被称谓实参。
形参:
形式上的参数,函数定义的时候,传递的参数,当前并不知道是什么,用来接收实参的,形参类似一个变量,声明了并未赋值**,**多个形参之间用逗号隔开
实参:
实际上的参数,函数调用的时候传递的参数,实参是传递给形参,相当于给形参赋值
**注意:**实参可以是任何类型
可以是一个对象,当我们的参数过多时,可以将参数封装到一个对象中,然后通过对象传递
实参可以是一个对象,也可以是一个函数
javascript
//将参数封装到对象中传递
function sayhello(o) {
//console.log("o="+o);//对象
console.log("我是" + o.name + ",今年" + o.age + "岁了," +
"我是一个" + o.gender + "人" + ",我住在" + o.address);
}
//创建一个对象
var obj = new Object();
obj.name = "孙悟空";
obj.age = 18;
obj.gender = "男";
obj.address = "花果山";
sayhello(obj); //可以直接全部赋值
//实参可以是一个函数
function fun(a) {
//console.log("a="+a);
a(obj);
}
fun(sayhello);
/*
sayhello()
-调用函数
-相当于使用的函数的返回值
-机器作出的东西
sayhello
-函数对象
-相当于直接使用函数对象
-机器
*/
参数的作用:
在函数内部某些值不能固定的时候,我们可以通过参数在调用函数时传递不同的值进去
语法结构:
javascript
function 函数名(形参1,形参2····形参n){//声明函数的小括号里的是形参(形式上的参数)
执行语句.....
}
函数名(实参1,实参2····)//在函数调用的小括号里面是实参(实际参数)
形参和实参匹配的问题
如果形参和实参的个数一致,则正常输出结果
如果实参的个数多于形参的个数,会取形参的个数
如果实参的个数小于形参的个数,多余的形参默认定义为undefined
调用函数时,解析器不会检查实参的类型,所以要注意,是否有可能会接收到非法的参数,函数的实参可以是任意的数据类型
建议形参和实参个数一致
方法:
对象中的函数属性就叫"方法"
javascript
//方式一
per.sayHi = function () {
console.log("hello");
};
//方式二
let fun = function () {
console.log("hello");
};
per.sayHi = fun;
//输出
per.sayHi = fun;
console.log(per.sayHi);
per.sayHi();
