接下来我将为大家详细讲解“JavaScript面向对象之共享成员属性与方法及prototype关键字用法”的攻略。
在JavaScript中,我们可以通过定义类(class)的方式来实现面向对象编程。一个类代表了一类对象的行为和属性,但是有时候我们需要让多个对象共享一些属性或方法,这时候我们就可以使用共享成员属性与方法的方式。
共享成员属性与方法指的是,在类中定义的属性或方法,可以通过类名来访问,也可以通过类的实例化对象来访问。这样一来,多个实例对象就可以共享类中定义的属性和方法。
示例代码如下:
class Animal {
static color = 'blue'; // 定义共享属性
static isAnimal(obj) { // 定义共享方法
return obj instanceof Animal;
}
constructor(name) {
this.name = name;
}
sayHello() {
console.log(`Hello, I'm ${this.name}.`);
}
}
console.log(Animal.color); // "blue"
const cat = new Animal('Tom');
const dog = new Animal('Spike');
cat.sayHello(); // "Hello, I'm Tom."
dog.sayHello(); // "Hello, I'm Spike."
console.log(Animal.isAnimal(cat)); // true
console.log(Animal.isAnimal(dog)); // true
在上面的示例代码中,我们定义了一个Animal
类,其中包括一个静态属性color
和一个静态方法isAnimal
。这两个共享属性和方法可以通过Animal
类的对象以及实例化对象cat
和dog
来访问。
在JavaScript中,每个对象都有一个内置属性__proto__
,它指向该对象的原型对象(prototype)。原型对象可以包含公共的属性和方法,它可以被类实例化后的对象继承和共享,避免了内存浪费。
我们可以通过在类对象的属性或方法上使用prototype
关键字来达到共享原型对象的目的。也就是说,prototype中定义的属性和方法将被该类的所有实例对象共享。
示例代码:
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
sayHello() {
console.log(`Hello, My name is ${this.name}.`);
}
}
Person.prototype.sex = 'Unknown'; // 定义原型属性
Person.prototype.getAge = function() { // 定义原型方法
console.log(`I'm ${this.age} years old.`);
}
const alice = new Person('Alice', 20);
const bob = new Person('Bob', 25);
alice.sayHello(); // "Hello, My name is Alice."
bob.sayHello(); // "Hello, My name is Bob."
console.log(alice.sex); // "Unknown"
console.log(bob.sex); // "Unknown"
alice.getAge(); // "I'm 20 years old."
bob.getAge(); // "I'm 25 years old."
在上面的示例代码中,我们定义了一个Person
类,并在类的外部使用prototype
关键字定义了一个属性sex
和一个方法getAge
。实例化后的对象alice
和bob
都可以访问共享的原型属性和方法。
总结:
prototype
关键字可以被用来定义原型属性和方法,实现对所有实例对象的共享和继承。本文链接:http://task.lmcjl.com/news/11540.html