关键词

javascript面向对象之共享成员属性与方法及prototype关键字用法

接下来我将为大家详细讲解“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类的对象以及实例化对象catdog来访问。

prototype关键字用法

在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。实例化后的对象alicebob都可以访问共享的原型属性和方法。

总结:

  • 共享成员属性和方法可以使多个实例对象共享同样的属性和方法,避免内存浪费。
  • prototype关键字可以被用来定义原型属性和方法,实现对所有实例对象的共享和继承。

本文链接:http://task.lmcjl.com/news/11540.html

展开阅读全文