对象
为什么要有对象
对象能够将一组具有“内在联系”的数据,集合为一个操作单位,方便数据的处理。
比如,一个人,具有的数据包括:name, age, sex, edu, salary,等等。
则如果只用传统基本类型的变量,就会需要多个变量来记录,而用对象变量,则只要一个变量就可以。
什么是对象
现实生活中:万物皆对象,对象是一个具体的事物,一个具体的事物就会有行为和特征。
举例: 一个人,一部车,一个手机
车是一类事物,门口停的那辆车才是对象
特征:红色、四个轮子
行为:启动、行驶、刹车
JavaScript中的对象
JavaScript中的对象其实就是生活中对象的一个抽象
JavaScript的对象是无序属性的集合。
其属性可以包含基本值、对象或函数。对象就是一组没有顺序的值。我们可以把JavaScript中的对 象想象成键值对,其中值可以是数据和函数。
对象的行为和特征
特征---属性
行为---方法
-
事物的特征在对象中用属性来表示。
-
事物的行为在对象中用方法来表示。
-
一个对象的典型定义形式如下所示:
var myDreamGirl = { name : "小红", age : 18, sex : "女", hair : "长发", sing : function { console.log("歌声缥缈"); }, dance : function { console.log("舞姿袅袅"); } }
对象创建方式
-
对象字面量
var o = { name: 'zs', age: 18, sex: true, sayHi: function () { console.log(this.name); } };
-
构造函数创建对象
var person = new Object(); person.name = 'lisi'; person.age = 35; person.job = 'actor'; person.sayHi = function() { console.log('Hello,everyBody'); }
-
工厂函数创建对象
function createPerson(name, age, job) { var person = new Object(); person.name = name; person.age = age; person.job = job; person.sayHi = function(){ console.log('Hello,everybody'); } return person; } var p1 = createPerson('张三', 22, 'actor');
-
自定义构造函数
function Person(name, age, job){ this.name = name; //this是关键字,这里代表“自己”,“当前对象” this.age = age; this.job = job; this.sayHi = function(){ console.log('Hello,everybody'); } } var p1 = new Person('张三', 22, 'actor');
属性和方法
如果一个变量属于一个对象所有,那么该变量就可以称之为该对象的属性,属性一般是名词,用来描述事物的特征
如果一个函数属于一个对象所有,那么该函数就可以称之为该对象的方法,方法一般是动词,用来描述事物的功能
new关键字
构造函数 ,是一种特殊的函数。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。
- 构造函数用于创建一类对象,首字母建议使用大写。
- 构造函数要和new一起使用才有意义。
new在执行时会做四件事情
new会在内存中创建一个新的空对象
new 会让this指向这个新的对象
执行构造函数 目的:给这个新对象加属性和方法
new会返回这个新对象
this关键字
JavaScript中的this指向问题,有时候会让人难以捉摸,随着学习的深入,我们可以逐渐了解
现在我们需要掌握函数内部的this几个特点
1. 函数在定义的时候this是不确定的,只有在调用的时候才可以确定
2. 一般函数直接执行,内部this指向全局window
3. 函数作为一个对象的方法,被该对象所调用,那么this指向的是该对象
4. 构造函数中的this其实是一个隐式对象,类似一个初始化的模型,所有方法和属性都挂载到了这个隐式对象身上,后续通过new关键字来调用,从而实现实例化
遍历对象的属性
通过for…in语法可以遍历一个对象
var obj = {name : "张三", age : 18};
obj.edu = "大学";
console.log(obj.name); //取值(取得对象obj的属性name的值)
obj.age = 19; //赋值(给对象obj的属性age赋新的值)
//遍历对象
for(var key in obj) { //此时,key代表“其中某个键名(属性名或方法名)”
console.log(key + ":" + obj[key]); //obj[key]代表该对的某个键对应的值
}
删除对象的属性
function fun() {
this.name = 'mm';
}
var obj = new fun();
console.log(obj.name); // mm
delete obj.name;
console.log(obj.name); // undefined
简单类型和复杂类型的区别
基本类型又叫做值类型,复杂类型又叫做引用类型 值类型:简单数据类型,基本数据类型,在存储时,变量中存储的是值本身,因此叫做值类型。
引用类型:复杂数据类型,在存储时,变量中存储的仅仅是地址(引用),因此叫做引用数据类型