1、什么是对象
对象是一个整体,对外提供一些操作。
2、什么是面向对象
使用对象时,只关注对象提供的功能,不关注其内部细节。
面向对象是一种通用思想,并非只在编程中运用
3、面向对象编程(OOP)的特点
封装:达到反复使用的目的
多态:父类和子类具有相同的操作,但是这些操作有各有区别
继承:从已有对象上,继承出新的对象
4、对象的组成
方法 —— 函数:过程、动态的
属性 —— 变量:状态、静态的
5、工厂方式构造对象
//最简单的,最原始的用来生产对象的方式
//用工厂方式构造对象
function createPerson(name, sex){ //构造函数
//1、原料
var obj = new Object()
//2、加工
obj.name = name;
obj.sex = sex;
obj.showName = function(){
console.log(this.name)
}
obj.showSex = function(){
console.log(this.sex)
}
//3、出厂
return obj;
}
var p1 = createPerson('blue', '男')
var p2 = createPerson('byu', '男')
工厂方式构造对象的缺点:
1、缺少new
-为什么要用new?使用new可以让构造函数得到很大的简化,并且可以提供一些新的特性
2、构造出来的对象都有一套自己的函数,浪费资源
解决没有new的问题
function createPerson(name, sex){
//假想系统内部创建了一个this对象
//var this = new Object()
this.name = name;
this.sex = sex;
this.showName = function(){
console.log(this.name)
}
this.showSex = function(){
console.log(this.sex)
}
//假想系统最后将this返回出去
//return this;
}
var p1 = new createPerson('blue', '男')
var p2 = new createPerson('byu', '男')
解决浪费内存的问题
利用原型prototype,直接给类(构造函数)添加方法,原型的一个重要功能就是可以扩展系统对象。
类与对象(实例)的区别:在var arr = new Array()中,arr为对象,Array为类。类不具体实际功能,只能用来构造对象,对象具备实际功能,被类构造出来的
function createPerson(name, sex){
this.name = name;
this.sex = sex;
}
//利用原型prototype,直接给类(构造函数)添加方法
createPerson.prototype.showName = function(){
console.log(this.name)
}
createPerson.prototype.showSex = function(){
console.log(this.sex)
}
var p1 = new createPerson('blue', '男')
var p2 = new createPerson('byu', '男')
可以通过原型来给对象添加属性,但是直接给对象本身添加的属性优先级更高,但是通过原型添加的属性不会消失,只是暂时隐藏
Array.prototype.a = 12
var arr = [1, 2, 3]
alert(arr.a) //12
arr.a = 5
alert(arr.a) //5
delete arr.a
alert(arr.a) //12