对象
具有独特特征的属性和方法的集合,万事万物都是对象
面向对象的思想就是把一切都当成对象
面向过程关注的实现功能的步骤,是如何把功能拆解后一步步的实现
面向对象则是关注的实现功能的一系列的对象
(1)对象就是一个单独事物的抽象
eg:
person
car
通过对现实事物的抽象成对象
(2)对象是一个容器,封装了属性和方法,所以也可认为对象是属性和方法的无序集合
开发中,对象是抽象的 数据集,功能集
JS中变量是数据值的容器,var person=‘张三’,将单一值’张三’赋给变量person
对象也是变量,但是对象包含很多值 例:如下代码块
JS并不是完全的面向对象的编程语言,JS是基于原型的面向对象语言,没有class(类)(在ES6前,JS并没有class(类)的概念),产生对象的方式也与其他OO语言有所不同,采用原型的方式来构造对象
那么,JS时如何创建对象的:
实际上,JS 是通过一种叫做原型(prototype)的方式来实现面向对象编程的
对象(object)是依靠 构造器(constructor)利用 原型(prototype)构造出来的
JS中的对象是键值对的集合 key:value,key:value,…
键值对被称为属性,对象也可以有方法,方法是在对象上执行的动作,方法以函数定义存储在属性中 (方法是作为属性来存储的函数)
var person={
name:'张三',
age:21,
introduce:function(){
return '我叫'+this.name+',今年'+this.age+'岁';
}
}
在函数定义中,this指向该函数的"owner",
在上面的例子中,this指向的是拥有introduce函数的person对象,也可以说this指的是拥有name属性的this(即person)对象
JS中经典的模拟对象的方式:
var Person=new Object();
Person.name='张三';
// 亦或是如下:
var Person={
name:'张三'
}
构造函数方式创建对象
在JavaScript中,构造函数是给对象添加属性,初始化属性用的
function Person(){
this.name='张三';
}
var person_01=new Person();
person_01便是通过我们自己所写的构造函数所创建的对象(实例)
new Person() 的过程叫做实例化
在构造函数调用开始的时候,有一个赋值操作,也就是让this = 刚创建出来的对象
在构造函数中,this就代表刚创建出来的对象(例中person_01)
两种方式的比较
使用new关键字创建的对象,对象的类型就是创建这个对象使用的构造函数的函数名
使用{}创建对象,对象的类型一定是Object,因为相当于使用了new Object()