在编程中,万物皆对象
。我们在编程中,使用对象来描述万事万物。怎么描述呢?什么事物,只要描述了其特征和行为就可以知道在描述什么。
举个例子,我们猜个谜语:
什么东西,小时候是黑色的,长大是绿色的,小时候在水里游,长大了在岸上跳。
基本都可以猜到,我们描述的是青蛙。
其中,颜色是青蛙的特征,在水里游和在岸上跳是行为。
我们在编程中,也是使用特征
和行为
描述任何事物。
使用属性
描述事物的特征
,使用方法
来描述行为
, 就是对象这种语法。
所以:对象就是属性和方法的集合
对象有什么用
我们之前学习过的对象:Math、Date
我们发现,只要学习对象的一些属性和方法,直接使用,就可以得到自己想要的效果。
例如-得到随机数: Math.random()
我们不需要关心随机数到底是怎么产生的,只要结果——不关心过程,只关心结果
- 使用对象可以方便的记录一些数据
这就要涉及到一个在编程界内的著名思想——面向对象思想
什么是面向对象思想?找对象,命令对象做事情。
肚子饿了,想吃饭,找一个厨师,命令厨师做饭给我们吃。厨师就是一个对象。我们不关系厨师是如果做饭的,只要做好了给我们吃就行。
就好像我们获取当前日期:
// 新找到一个日期对象,就好像我们找到一个厨师
var date = new Date();
// 调用日期对象的获取年份的方法,就好像我们命令厨师做饭
date.getFullYear();
所以对象的好处在于:我们只要知道对象有什么属性和方法,不需要知道对象里面是如何实现的。我们实现一个效果的过程将大缩短,实现高效开发。
对象的语法
创建对象
构造函数
var obj = new Object(); // 这是一个没有属性和方法的对象
console.log(obj);
字面量
var obj = {}; // 这也是一个没有属性和方法对象,其本质和构造函数创建的对象是一样的
console.log(obj);
为对象添加属性和方法
一个个设置
添加属性的语法:
对象.属性 = 值;
添加方法的语法:
对象.方法名 = function(){}
如: 使用对象描述一个叫狗蛋
的人
var obj = {};
obj.name = '狗蛋';// 名字是一个人的特征
obj.sayName = function(){ // 人会说出自己的名字,也就是人有自己的行为
console.log('你好,我叫' + obj.name);
}
字面量初始化对象
// 描述一个学生
var student = {
name : '狗蛋',
age : 12,
gender : '男',
sayName : function(){
console.log(student.name);
}
}
// 属性和值之间使用分号分隔,一个属性和一个值叫一个键值对。多个键值之间使用逗号分隔
使用对象的属性和方法
访问对象的属性:
对象.属性
调用对象的方法:
对象.方法名(参数);
// 得到对象的名字,属性可以当成变量使用
console.log(obj.name);
// 调用对象的方法,方法的本质是函数
obj.sayName();
对象语法补充
上面的方式是可以创建对象的,但是只能一个一个的创建,如果我们要创建大量的对象,那么上面的两个方式也就不推荐了。
当我们要大量创建的时候,我们想要创建对象,更好的方式是:自定义构造函数
自定义构造函数
语法格式
function 要描述的对象的种类(参数){
this.属性1 = 参数1;
this.属性2 = 参数2;
...
this.方法名 = function(){}
...
}
例如我们要给学生对象写构造函数
// 我们习惯将 描述对象种类的名词首字母大写
function Student(name,age,gender){
// 属性名不是一定要和形参一样,但是从语义的角度,最好是一样的
this.name = name;
this.age = age;
this.gender = gender;
// 学生有一个自我介绍的方法
this.sayHi = function(){
console.log('您好,我叫'+this.name+',今年'+this.age+'岁了,是个'+this.gender+'孩子');
}
}
此时当我们要创建一个学生的时候,只要new
操作一下
var s1 = new Student('狗蛋',12,'男');
console.log(s1);
// 让一个学生对象做自我介绍
s1.sayHi();
被构造函数new出来的对象,我们称为该对象的实例对象——上面的代码来说,s1是Student构造函数的实例对象
键的方式访问对象的属性和有方法
语法:
对象[属性名]
var obj = {};
obj['name'] = '狗蛋';
obj['sayName'] = function(){
console.log('你好,我叫' + obj['name']);
}