JavaScript 构造函数私有、公有、静态、特权方法
2022-06-27 本文已影响0人
暴躁程序员
3. 构造函数的私有、公有、静态、特权方法
- 私有属性和方法
创建:在构造函数内部创建的变量是私有属性,创建的函数是私有方法
特点:私有方法不可在类的外部调用,且可调用共有和私有的方法或属性
function Student() {
const name = 'Student 私有属性'
const method1 = function () {
return 'Student 私有方法'
}
function method2() {
return 'Student 私有方法'
}
}
- 公有属性和方法
创建:在构造函数内部通过this创建的变量是公有属性,在构造函数内部或者外部创建在原型对象上的函数是公有方法
特点:公有方法可以通过实例化的方式在类的外部调用
function Student(params) {
this.name = 'Student 公有属性'
Student.prototype.method1 = function () {
console.log('Student 公有方法1');
}
}
Student.prototype.method2 = function () {
console.log('Student 公有方法2' + this.name);
}
console.log(new Student().name);
new Student().method1()
new Student().method2()
// 在构造函数内部创建的公有方法,所有属性和方法均可调用
// 在构造函数外部创建的公有方法,可调用共有的属性和方法,不可调用私有属性和方法
- 静态属性和方法
创建:在构造函数外部通过构造函数名称创建的属性是静态属性,创建的方法是静态方法
特点:静态方法通过构造函数名称的方式调用,且不可访问构造函数内部的所有属性和方法
function Student() {
this.age = 18
}
Student.nameX = 'Student 静态属性'
Student.method = function () {
console.log('Student 静态方法' + this.age); // 结果: Student 静态方法undefined
}
Student.method()
console.log(Student.nameX);// 注意:Student.name的结果是 Student,注意自定义的名称勿要起冲突
- 特权方法
创建:在构造函数内部通过 this 的方式创建的方法是特权方法
特点:与在构造函数内部创建的公有方法相同
function Student() {
this.age = 18
this.method = function () {
console.log(this.age);
}
}
new Student().method()