JavaScript (面向对象编程篇)
\(update : 2022.2.5\)
学习原文
\(JavaScript\) 的所有数据都可以看成对象.
作者先提及了 Java 或 c# 面向对象的两个基本概念 .
类 : 定义 Student 来表示学生类型 , 但不表示某个具体的学生 .
实例 :实例是根据类创建的对象 , 例如根据 Student 类可以创建出 xiaoming , xiaohong的多个具体的例子.
类似于 C 中的结构体.
不过在 JavaScript 中有区别 , 它是通过原型 (prototype) 来实现面向对象编程.
var Student = {
name: 'Robot',
height: 1.2,
run: function () {
console.log(this.name + ' is running...');
}
};
var xiaoming = {
name: '小明'
};
xiaoming.__proto__ = Student;
xiaoming.name; // '小明'
xiaoming.run(); // 小明 is running...
最后一行代码把 xiaoming 的原型指向了对象Student,看上去 xiaoming 仿佛是从 Student 继承下来的 .
同样可以指向其他的对象.
var Bird = {
fly: function () {
console.log(this.name + ' is flying...');
}
};
xiaoming.__proto__ = Bird;
xiaoming.fly(); // 小明 is flying...
但作者提醒我们不要直接用 obj._proto_ 去改变一个对象的原型 . 用 Object.create() 的方法可以传入一个原型对象 , 并创建一个基于该原型的新对象 (它是没有任何属性的).
看例子 :
// 原型对象:
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