使用 function
创建类的方法,也被称作“构造函数模式”,是JavaScript
中一种常用的定义对象的方法。
方法1:直接创建
我们可以使用function
语法,按照类定义对象的基本思路,创建一个构造函数(类)。在构造函数(类)内部使用this
关键字声明该类的实例属性和方法。
下面的代码演示了这种方式创建类Person
,并定义了实例属性name
和age
以及实例方法sayName
。
function Person(name, age) {
this.name = name; // 类的实例属性
this.age = age; // 类的实例属性
this.sayName = function () { // 类的实例方法
console.log(`My name is ${this.name}`);
}
}
我们需要使用构造函数来实例化该类并创建类的对象。
const person = new Person('Tom', 20);
person.sayName(); // 输出:My name is Tom
方法2:使用原型,更加优雅
很显然,上述声明方式虽然可以正确地创建类,但从语义上来说,却不是将类的属性和方法一一抽象分离的结果,而是将实例属性和方法都绑定在了构造函数内部。这显然没有遵循高内聚、低耦合的设计原则。
因此,更优雅、推荐的方式是:在构造函数的prototype
原型上定义实例方法和属性。
下面的代码片段演示了这种方式创建类Person
。在构造函数内部,仅去声明实例属性name
和age
。
function Person(name, age) {
this.name = name; // 类的实例属性
this.age = age; // 类的实例属性
}
在构造函数的prototype
上定义类的实例方法sayName
。
Person.prototype.sayName = function () { // 类的实例方法
console.log(`My name is ${this.name}`);
}
我们也需要使用构造函数来实例化该类并创建类的对象。
const person = new Person('Tom', 20);
person.sayName(); // 输出:My name is Tom
第二种方式更加优雅,因为在构造函数中不会出现实例方法、实例属性的定义。我们在使用时可以更好的区分类和实例,使代码的可维护性更好。
示例1:Student类
下面的示例代码中,我们使用方法2定义了一个Student
类。该类有构造函数实例属性name
和age
,还有introduce
方法和使用static
关键字定义的静态属性className
。
function Student(name, age) {
this.name = name;
this.age = age;
}
// 类的实例方法
Student.prototype.introduce = function () {
console.log(`My name is ${this.name}, I'm ${this.age} years old, in the class ${Student.className}`);
}
// 类的静态属性
Student.className = 'math class';
const student1 = new Student('Tom', 18);
student1.introduce(); // 输出:My name is Tom, I'm 18 years old, in the class math class
示例2:Rectangle类
下面的示例代码中,我们使用方法1定义了一个Rectangle
类。该类有构造函数实例属性width
和height
以及实例方法area
和show
。
function Rectangle(width, height) {
this.width = width;
this.height = height;
this.area = function () { // 实例方法
return this.width * this.height;
}
this.show = function () { // 实例方法
console.log(`This is a rectangle and the width is ${this.width}, the height is ${this.height}, the area is ${this.area()}`);
}
}
const rectangle1 = new Rectangle(5, 6);
rectangle1.show(); // 输出:This is a rectangle and the width is 5, the height is 6, the area is 30
这种方法虽然在语义上不是非常优雅,但在书写简单类时有时也是非常方便的。
总结
面向对象编程是一种非常常见的编程思路。在JavaScript中使用function
创建类,是一种常用的面向对象编程方法。我们可以通过两种方式,使用构造函数定义实例属性和实例方法,然后用prototype
声明实例方法,从而构造面向对象编程的JavaScript
应用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Javascript使用function创建类的两种方法(推荐) - Python技术站