构造函数的本质是创建对象
2023-11-23 15:07:32
构造函数概述
构造函数是一种创建对象的函数。通过使用构造函数,可以定义对象的数据结构和行为。构造函数的目的是为对象定义一个公共接口,以及为该类对象提供共同的方法和属性。JavaScript中的构造函数通常以大写字母开头,比如 Person()。
function Person(name, age) {
this.name = name;
this.age = age;
}
上述代码定义了一个 Person 构造函数,它接收两个参数:name 和 age。当调用这个构造函数时,它会创建一个新的 Person 对象,并将 name 和 age 作为对象的属性。
const person1 = new Person('John', 30);
const person2 = new Person('Mary', 25);
上述代码创建了两个 Person 对象:person1 和 person2。这两个对象都有 name 和 age 属性。
原型
原型是 JavaScript 中的一种特殊对象,它是所有其他对象的祖先。每个对象都有一个原型,原型也是一个对象,它有自己的属性和方法。当一个对象访问一个不存在的属性或方法时,它会沿着原型链向上查找,直到找到该属性或方法。
const person1 = new Person('John', 30);
console.log(person1.name); // John
console.log(person1.age); // 30
console.log(person1.toString()); // [object Person]
上述代码创建了一个 Person 对象 person1,并打印了它的 name、age 和 toString() 方法。其中,toString() 方法是 Object 原型的内置方法,它返回对象的字符串表示形式。
继承
继承是指一个对象从另一个对象那里继承属性和方法的能力。在 JavaScript 中,继承可以通过原型链来实现。
function Student(name, age, major) {
Person.call(this, name, age);
this.major = major;
}
Student.prototype = Object.create(Person.prototype);
上述代码定义了一个 Student 构造函数,它继承了 Person 构造函数。Student 构造函数接收三个参数:name、age 和 major。当调用这个构造函数时,它会先调用 Person 构造函数来创建 Person 对象,然后将 major 作为对象的属性。
const student1 = new Student('John', 30, 'Computer Science');
console.log(student1.name); // John
console.log(student1.age); // 30
console.log(student1.major); // Computer Science
console.log(student1.toString()); // [object Student]
上述代码创建了一个 Student 对象 student1,并打印了它的 name、age、major 和 toString() 方法。其中,toString() 方法是 Object 原型的内置方法,它返回对象的字符串表示形式。
封装
封装是将数据和行为封装在一个对象中,使其与其他对象隔离开来的过程。在 JavaScript 中,可以通过构造函数来实现封装。
function Person(name, age) {
// 私有属性
const _name = name;
const _age = age;
// 公共方法
this.getName = function() {
return _name;
};
this.getAge = function() {
return _age;
};
}
上述代码定义了一个 Person 构造函数,它封装了 name 和 age 属性,并提供了 getName() 和 getAge() 方法来访问这些属性。
const person1 = new Person('John', 30);
console.log(person1.getName()); // John
console.log(person1.getAge()); // 30
console.log(person1._name); // undefined
console.log(person1._age); // undefined
上述代码创建了一个 Person 对象 person1,并打印了它的 name 和 age 属性。其中,_name 和 _age 是私有属性,不能直接访问。