JS面向对象之公有、私有、静态属性和方法详解
面向对象编程思想是现代编程语言的重要组成部分,在JS中同样也支持面向对象编程。在面向对象编程中,属性和方法可以被分为公有、私有、静态属性和静态方法四种类型。在本篇攻略中,我们将会详细讲解这四种类型的属性和方法。
公有属性和方法
公有属性和方法指的是可以被实例对象和类对象访问的属性和方法。在JS中可以使用this关键字将属性和方法设置为公有属性和方法。具体示例如下:
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
sayHello() {
console.log("Hello, I am " + this.name + ", " + this.age + " years old.");
}
}
let person1 = new Person("Tom", 20);
person1.sayHello(); // 输出:"Hello, I am Tom, 20 years old."
在上述示例中,name和age实例属性被设置为公有属性,sayHello方法被设置为公有方法。我们通过实例对象person1访问了sayHello方法,并成功输出。
私有属性和方法
私有属性和方法指的是只能在类内部被访问的属性和方法。在JS中,我们可以使用闭包的形式将属性和方法设置为私有属性和方法。具体示例如下:
class Person {
constructor(name, age) {
this.getName = function() {
return name;
}
this.getAge = function() {
return age;
}
}
sayHello() {
console.log("Hello, I am " + this.getName() + ", " + this.getAge() + " years old.");
}
}
let person1 = new Person("Tom", 20);
person1.sayHello(); // 输出:"Hello, I am Tom, 20 years old."
console.log(person1.getName()); // 报错:person1.getName is not a function
在上述示例中,getName和getAge属性被设置为私有属性,因此我们无法通过实例对象person1访问这两个属性。我们通过sayHello方法访问了这两个属性,并成功输出。
静态属性和方法
静态属性和方法指的是属于类对象而不属于实例对象的属性和方法。在JS中,我们可以使用static关键字将属性和方法设置为静态属性和方法。具体示例如下:
class Person {
static type = "human";
constructor(name, age) {
this.name = name;
this.age = age;
}
static sayType() {
console.log("This is a " + this.type + ".");
}
}
let person1 = new Person("Tom", 20);
Person.sayType(); // 输出:"This is a human."
console.log(person1.type); // 输出:undefined
在上述示例中,type属性被设置为静态属性,sayType方法被设置为静态方法。我们通过类对象Person访问了sayType方法,并成功输出。
示范示例
下面我们来看一个完整的示范示例,这个示例展示了对象属性和方法的混合使用:
class Animal {
static type = "animal";
constructor(name) {
let _name = name; // 私有属性
this.getName = function() { // 特权方法
return _name;
}
Animal.sayType();
}
sayHello() { // 公有方法
console.log("Hello, I am " + this.getName() + ".");
}
static sayType() { // 静态方法
console.log("This is a " + this.type + ".");
}
}
let animal1 = new Animal("Dog");
animal1.sayHello(); // 输出:"Hello, I am Dog."
console.log(animal1._name); // 输出:undefined
Animal.sayType(); // 输出:"This is a animal."
在上述示例中,我们同时使用了公有、私有、特权和静态属性和方法。同时,我们也展示了私有属性和方法的定义方式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js面向对象之公有、私有、静态属性和方法详解 - Python技术站