面向对象编程

面向对象编程

面向对象的两个基本概念:

  • 类:类是对象的类型模板,例如,定义Student类来表示学生,类本身是一种类型,Student表示学生类型,但不表示任何具体的某个学生;
  • 实例:实例是根据类创建的对象,例如,根据Student类可以创建出xiaoming、xiaohong、xiaojun等多个实例,每个实例表示一个具体的学生,他们全都属于Student类型。

在JS中不区分类和实例的概念,,而是通过原型(prototype)来实现面向对象编程。

创建一个xiaoming对象(通过obj.proto去改变一个对象的原型)

obj.proto去改变一个对象的原型(低版本的IE也无法使用__proto__)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//先创建一个原型对象
var Student = {
name: 'Robot',
height: 1.2,
run: function () {
console.log(this.name + ' is running...');
}
};
//再创建一个xiaoming对象,目前该对象只有name属性
var xiaoming = {
name: '小明'
};
//把xiaoming的原型指向了对象Student,看上去xiaoming仿佛是从Student继承下来的:
//xiaoming现在拥有Student的属性和方法
xiaoming.__proto__ = Student;

// xiaoming.name //'小明'
// Student.name //'Robot'

编写一个函数来创建xiaoming对象(基于Object.create()方法)

Object.create()方法可以传入一个原型对象,并创建一个基于该原型的新对象,但是新对象什么属性都没有

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 原型对象:
var Student = {
name: 'Robot',
height: 1.2,
run: function () {
console.log(this.name + ' is running...');
}
};

function createStudent(name) {
// 基于Student原型创建一个新对象:
var s = Object.create(Student);
// 初始化新对象:
s.name = name;
return s;
}

var xiaoming = createStudent('小明');
xiaoming.run(); // 小明 is running...
xiaoming.__proto__ === Student; // true

原文链接[‘https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001434499763408e24c210985d34edcabbca944b4239e20000']

创建对象