面向对象编程
面向对象编程是一种使用包含数据和行为的对象来模拟现实世界实体的编程范式。这种方法便于封装、继承和多态性,代码更易管理、复用和扩展
-
在JS当中所体现的主要来源于封装和继承,封装在日常处处都会用到,我们使用函数方法就是一种封装
-
继承则是我们的重点,原型链的概念就来自于继
-
创建对象的方式
-
new Object()
new Object() 是 JavaScript 的原生构造函数,调用时会创建一个空对象并返回该对象:
let obj = new Object() // 创建一个对象
obj.name = 'zhangsan' // 给对象添加属性和方法
obj.sayName = function(){
// 给对象添加方法
console.log(this.name) // this指向当前对象
}
obj.sayName() // 调用方法
- 字面量方式创建对象
最简洁直观的方式,适合定义单例对象或简单数据结构
let obj = {
// 创建一个对象
name: 'zhangsan', // 添加属性和方法
sayName: function(){
// 添加方法
console.log(this.name) // this指向当前对象
}
}
obj.sayName() // 调用方法
- 工厂函数
工厂函数是一种创建对象的函数,返回一个新对象而不是使用 this,无法使用 instanceof 检查类型,无法使用原型链
function createPerson(name, age) {
return {
name,
age,
greet() {
console.log(`Hello, ${
this.name}!`);
}
};
}
const bob = createPerson('Bob', 25);
bob.greet(); // 输出: Hello, Bob!
- Object.create()
Object.create() 方法用于创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。
let obj = Object.create(null) // 创建一个对象,原型为null
obj.name = 'zhangsan' // 添加属性和方法
obj.sayName = function(){
// 添加方法
console.log(this.name) // this指向当前对象
}
obj.sayName() // 调用方法
const proto = {
greet() {
console.log(`Hello, ${
this.name}!`);
}
};
const john = Object.create(proto);
john.name = 'John'; // 添加自身属性
john.greet(); // 输出: Hello, John!
- 构造函数
构造函数是一种特殊的函数,用于创建和初始化对象。在 JavaScript 中,构造函数通常以大写字母开头,用于区分普通函数。
通过 new 调用函数创建对象实例,适合批量生成结构化对象
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.greet = function() {
console.log