什么是对象?
对象就是可以拥有属性和方法的一个集合,在js中一切皆对象
new一个实例化对象经历的四个阶段:
创建一个空的实例化对象
让构造函数中的this指向空的实例化对象
执行(调用)构造函数,从而创建实例化对象自身的属性和方法
返回实例化对象
什么是面向对象?
面向过程:面向过程专注于如何去解决一个问题的过程步骤。编程特点是由一个个函数去实现每一步的过程步骤,没有类和对象的概念
面向对象:专注于由哪一个对象来解决这个问题,编程特点是出现了一个类,从类中拿到对象,由这个对象去解决具体问题
对于调用者来说,面向过程需要调用者自己去实现各种函数。而面向对象,只需要告诉调用者,对象中具体方法的功能,而不需要调用者了解方法中的实现细节。
三大特征:
封装,继承和多态
需要理解的概念
属性:对象本身所拥有的
方法:对象能够做的事情【功能】
抽象:在所有的对象中获取相同的特征的过程
封装:创建对象的过程
继承:从一个对象中获取另外一个对象的内容
重写:继承父级的方法之后,又对方法进行修改
创建对象的方式
1)字面量(新)
2)object(老)
3)在已知的对象上添加属性和方法
构造对象
当通过 new 关键字调用一个函数时,这个函数就可以称为构造函数
构造对象和函数的区别
调用方式不同普通函数只用函数名调用构造函数通过 new 关键字 调用
返回值不同
普通函数的返回值是函数体内 return 的结果
构造函数的返回值是 new 关键字 生成的对象
原型对象
所有函数都有一个原型对象 prototype,并且只有函数才拥有原型对象 prototype。原型对象也是一个对象
构造函数
function ren() {
(this.name = "ddd"), (this.age = 18);
}
ren.prototype.run = function () {
console.log("我会跑");
};
ren.prototype.eat = function () {
console.log("我能吃");
};
var ren1 = new ren("张三", 22);
var ren2 = new ren("李四", 45);
console.log(ren1.run === ren2.run);//true
console.log(ren1.eat === ren2.eat);//true
如果函数内部创建构造函数,每次new创建新的对象时都会生成一个新的内存空间,这样浪费了很多内存,
使用prototype在外部创建构造方法可以使所有创建出的新对象全部使用这一个构造方法,解决占用空间问题,也可以在外部创建构造属性,但创建出的构造属性不可发生改变(不推荐)
面向对象就是一种全新的写法而已。用面向过程能实现的功能,面向对象依然能够实现,对于初学者来说有些麻烦