私有属性和方法、公有属性和方法、静态属性和方法、原型属性和方法以及实例属性和方法

137 阅读2分钟

Object:

  • 私有属性和方法:Object没有私有属性和方法,所有属性和方法都是公有的。
  • 公有属性和方法:Object的属性和方法都是公有的,可以通过对象的属性和方法来访问。
  • 静态属性和方法:Object没有静态属性和方法。
  • 原型属性和方法:Object的原型属性和方法是Object.prototype上的属性和方法,可以通过对象的原型链来访问。
  • 实例属性和方法:Object没有实例属性和方法。

示例代码:

const obj = {
  name: 'John',
  age: 30,
  sayHello() {
    console.log(`Hello, my name is ${this.name}`);
  }
};

console.log(obj.name); // 输出: John
obj.sayHello(); // 输出: Hello, my name is John

构造函数:

  • 私有属性和方法:构造函数中可以使用闭包来创建私有属性和方法,只能在构造函数内部访问。
  • 公有属性和方法:构造函数中定义的属性和方法可以通过实例对象来访问。
  • 静态属性和方法:构造函数可以使用静态属性和方法,通过构造函数本身来访问。
  • 原型属性和方法:构造函数的原型属性和方法是通过原型链继承的,可以通过实例对象的原型链来访问。
  • 实例属性和方法:构造函数中定义的属性和方法可以通过实例对象来访问。

示例代码:

function Person(name, age) {
  // 私有属性
  const privateVar = '私有属性';

  // 私有方法
  function privateMethod() {
    console.log('私有方法');
  }

  // 公有属性
  this.name = name;
  this.age = age;

  // 公有方法
  this.sayHello = function() {
    console.log(`Hello, my name is ${this.name}`);
  };
}

// 静态属性
Person.staticProperty = '静态属性';

// 静态方法
Person.staticMethod = function() {
  console.log('静态方法');
};

// 原型属性
Person.prototype.protoProperty = '原型属性';

// 原型方法
Person.prototype.protoMethod = function() {
  console.log('原型方法');
};

const person = new Person('John', 30);

console.log(person.name); // 输出: John
person.sayHello(); // 输出: Hello, my name is John
console.log(Person.staticProperty); // 输出: 静态属性
Person.staticMethod(); // 输出: 静态方法
console.log(person.protoProperty); // 输出: 原型属性
person.protoMethod(); // 输出: 原型方法

Class:

  • 私有属性和方法:Class中可以使用闭包来创建私有属性和方法,只能在Class内部访问。
  • 公有属性和方法:Class中定义的属性和方法可以通过实例对象来访问。
  • 静态属性和方法:Class可以使用静态属性和方法,通过Class本身来访问。
  • 原型属性和方法:Class的原型属性和方法是通过原型链继承的,可以通过实例对象的原型链来访问。
  • 实例属性和方法:Class中定义的属性和方法可以通过实例对象来访问。

示例代码:

class Person {
  // 私有属性
  #privateVar = '私有属性';

  // 私有方法
  #privateMethod() {
    console.log('私有方法');
  }

  // 公有属性
  name;
  age;

  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  // 公有方法
  sayHello() {
    console.log(`Hello, my name is ${this.name}`);
  }

  // 静态属性
  static staticProperty = '静态属性';

  // 静态方法
  static staticMethod() {
    console.log('静态方法');
  }

  // 原型属性
  protoProperty = '原型属性';

  // 原型方法
  protoMethod() {
    console.log('原型方法');
  }
}

const person = new Person('John', 30);

console.log(person.name); // 输出: John
person.sayHello(); // 输出: Hello, my name is John
console.log(Person.staticProperty); // 输出: 静态属性
Person.staticMethod(); // 输出: 静态方法
console.log(person.protoProperty); // 输出: 原型属性
person.protoMethod(); // 输出: 原型方法