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(); // 输出: 原型方法