1、传统的面向对象
- 面向对象语言的一个标志就是类
- 类是所有对象的统称,是更高意义上的一种抽象,对象是类的实例
- 通过类可以创建任意多个具体的对象
2、JS的面向对象
- 在ES6之前JS没有类的概念,因此通常称JS为基于对象
- ECMA中对对象的定义:无序属性的集合,属性值可以是基本值、对象、函数
3、工厂模式
工厂模式是一种非常常见的设计模式, 这种模式抽象了创建具体对象的过程,即用函数来封装以特定接口创建对象。
// 创建工厂函数
function createPerson(name, age, height) {
var o = new Object()
o.name = name
o.age = age
o.height = height
o.sayHello = function () {
console.log("Hello, My name is " + this.name)
}
return o
}
// 创建两个对象
var person1 = createPerson("Tom", 28, 1.8)
var person2 = createPerson("Jury", 38, 1.6)
工厂模式无法解决对象类型的问题即创建的对象是Array还是Object,于是出现了构造函数模式
4、构造函数模式
构造函数可用来创建特定类型的对象,像Object和Array这样的原生构造函数,在运行时会自动出现在执行环境中,当然也可自定义构造函数。构造函数首字母一般大写,调用构造函数时需要使用new关键字
// 构造函数
function Person(name, age, height) {
this.name = name
this.age = age
this.height = height
this.sayHello = function () {
console.log(this.name)
}
}
// 使用构造函数创建对象
var person1 = new Person("Tom", 28, 1.8)
var person2 = new Person("Jury", 35, 1.9)
调用构造函数的执行过程
- 创建一个新对象, 这个新的对象类型其实就是Person类型.
- 将构造函数的作用域赋给新对象
- 执行构造函数中的代码
- 返回新对象, 但是是默认返回的, 不需要使用return语句
使用构造函数的主要问题,就是每个方法都要在每个实例上重新创建一遍,这是完全没有必要的因此出现了原型链
网友评论