1.什么是面向对象
面向对象是一种编程思想,是编程语言的一种特性
面向对象编程语言:java、c#、c++、js、php
面向过程编程语言:c、c++
面向对象编程语言的三大特性:封装、继承、多态
封装:将数据和操作数据的方法进行封装,封装到对象中,对象中可以包含多个方法
继承:子类可以继承父类的方法和属性
多态:一个对象可以有多种形态
2.属性和方法
1.什么是属性
在JavaScript中,属性是指一个对象所具有的数据,可以是数据类型(如字符串、数字、布尔值等),也可以是引用类型(如数组、对象、函数等)。属性通常用于描述对象的状态或特征。
例如:一部手机的价格、处理器、屏幕等都是属性,手机则为对象
2.什么是方法
方法是指一个对象所具有的行为,是对属性的操作或处理。方法通常用于描述对象的行为或功能。在JavaScript中,方法也是一种特殊的属性,它是一个函数对象,可以在对象上调用。
例如:使用手机进行购物,看电视,玩游戏属于方法,调用手机的属性来实习某些功能
3.创建对象,添加属性、方法
1.如何创建对象
1.1 使用字面量创建对象
const obj = {
property1: value1,
property2: value2,
// ...
};
1.2 使用构造函数创建对象
function Person(name, age) {
this.name = name;
this.age = age;
}
const person = new Person('Tom', 18);
1.3 使用Object.create()方法创建对象
const obj = Object.create(null);
1.4 使用Object.assign()方法创建对象
const obj1 = { a: 1 };
const obj2 = { b: 2 };
const obj3 = Object.assign({}, obj1, obj2);
1.5 使用展开运算符创建对象
const obj = {
...property1,
...property2,
// ...
};
1.6 使用Object.defineProperty()方法创建对象
const obj = {};
Object.defineProperty(obj, 'property1', {
value: value1,
writable: false,
enumerable: true,
configurable: true,
});
2.给创建的对象添加属性和方法
2.1 创建了一个对象,属性有品牌、价格、芯片,方法有:看电视、购物
var obj = {};
obj.brand = "Redmi";
obj.price = "1999";
obj.chip = "Snapdragon 8+";
obj.watchTV = function () {
console.log("看电视");
};
obj.shopping = function () {
console.log("购物");
};
console.log(obj);
4. 自封装
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sayName = function () {
console.log(this.name);
}
Person.prototype.sayAge = function () {
console.log(this.age);
}
var person1 = new Person('张三', 18);
var person2 = new Person('李四', 20);
person1.sayName();
person2.sayName();
person1.sayAge();
person2.sayAge();
// 继承
function Student(name, age, grade) {
Person.call(this, name, age);
this.grade = grade;
}
Student.prototype = new Person();
Student.prototype.constructor = Student;
Student.prototype.sayGrade = function () {
console.log(this.grade);
}
var student1 = new Student('王五', 22, 1);
var student2 = new Student('赵六', 24, 2);
student1.sayName();
student2.sayName();
student1.sayAge();
student2.sayAge();
student1.sayGrade();
student2.sayGrade();
// 构造函数继承
function Teacher(name, age, subject) {
Person.call(this, name, age);
this.subject = subject;
}
Teacher.prototype = new Person();
Teacher.prototype.constructor = Teacher;
Teacher.prototype.saySubject = function () {
console.log(this.subject);
}
var teacher1 = new Teacher('田七', 32, '语文');
var teacher2 = new Teacher('李八', 34, '数学');
teacher1.sayName();
teacher2.sayName();
teacher1.sayAge();
teacher2.sayAge();
teacher1.saySubject();
teacher2.saySubject();
// 原型链继承
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sayName = function () {
console.log(this.name);
}
Person.prototype.sayAge = function () {
console.log(this.age);
}
function Student(name, age, grade) {
Person.call(this, name, age);
this.grade = grade;
}
Student.prototype = Person.prototype;