嗯,学习归学习,除了coding的时候用到一些, 终究还是要对付面试的,哈哈哈哈。。。。
1. 对象字面量
最简单直接的方式,使用大括号 {} 创建对象:
const person = {
name: '张三',
age: 25,
sayHello: function() {
return `你好,我是${this.name}`;
}
};
2. Object构造函数
使用内置的Object构造函数:
const person = new Object();
person.name = '李四';
person.age = 30;
person.sayHello = function() {
return `你好,我是${this.name}`;
};
3. 构造函数模式
使用自定义构造函数创建多个相似对象:
function Person(name, age) {
this.name = name;
this.age = age;
this.sayHello = function() {
return `你好,我是${this.name}`;
};
}
const person1 = new Person('王五', 28);
const person2 = new Person('赵六', 32);
4. 工厂模式
通过函数封装对象创建过程:
function createPerson(name, age) {
return {
name,
age,
sayHello() {
return `你好,我是${this.name}`;
}
};
}
const person = createPerson('钱七', 26);
5. 原型模式
利用原型链实现属性和方法的共享:
function Person() {}
Person.prototype.name = '默认姓名';
Person.prototype.age = 0;
Person.prototype.sayHello = function() {
return `你好,我是${this.name}`;
};
const person1 = new Person();
const person2 = new Person();
6. 组合模式(构造函数+原型)
最常用的模式,结合了构造函数和原型的优点:
function Person(name, age) {
// 实例属性
this.name = name;
this.age = age;
}
// 共享方法
Person.prototype.sayHello = function() {
return `你好,我是${this.name}`;
};
- 类语法(ES6) 使用class关键字,语法更清晰:
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
sayHello() {
return `你好,我是${this.name}`;
}
}
const person = new Person('孙八', 29);
8. Object.create()
基于现有对象创建新对象:
const personProto = {
sayHello: function() {
return `你好,我是${this.name}`;
}
};
const person = Object.create(personProto);
person.name = '周九';
person.age = 27;
各种方式的区别对比
关键区别点
- 内存使用:原型模式和类语法的方法在原型上共享,节省内存
- 继承机制:构造函数、原型模式、类语法支持完整的原型继承
- this绑定:箭头函数和普通函数在对象方法中的this指向不同
- 属性特性:Object.defineProperty()可以定义属性的可枚举、可配置、可写特性
- 性能考虑:对于需要创建大量实例的场景,组合模式和类语法是最佳选择
实际应用建议
- 简单配置对象:使用对象字面量
- 需要多个相似实例:使用类语法或组合模式
- 需要复杂的继承关系:使用类语法
- 需要动态原型:使用Object.create()
- 现代项目开发:优先选择ES6类语法