美文网首页
javascript 类的私有/公有/静态属性、方法、特权方法

javascript 类的私有/公有/静态属性、方法、特权方法

作者: 一懒众衫小小小小 | 来源:发表于2020-04-15 18:14 被阅读0次

1. ES5的声明方法

function Person() {
    var name = 'abby'; // 私有属性
    function getName() { // 私有方法
        console.log(this, name, this.age); // this==>window
    }
    this.age = 10; // 公有属性
    this.speak = function() { // 特权方法
        console.log(this, name, this.age);  // this==>person (实例对象)
        return getName;
    }
}
Person.sex = '女'; // 静态属性
Person.prototype.country= 'China'; // 原型属性
Person.walk = function() { // 静态方法
    console.log('walk==>', this); // this==> 指向Person类
}
Person.prototype.sleep = function() { // 公有方法
    console.log('sleep==>', this); // this ==> person (实例对象)
}

const person = new Person();
(person.speak())();
const getName = person.speak();
getName();
console.log(Person.sex);
console.log(Person.prototype.country);
Person.walk();
person.sleep();

2. ES6的声明方法

class Person() {
    static sex = '女'; // 静态属性 提案用#表示私有属性 #sex = '女';
    constructor() {
        this.age = 10; // 公有属性
    }
    age = 10; // 等同与在构造函数中this.age = 10;
        this.age = 10; //  等价上面
    static walk() { // 静态方法
        console.log('walk==>', this);
    }

    sleep() { // 原型方法
        console.log('sleep==>', this);
    } // 等同 Person.prototype.sleep
    
    get name() {
        console.log('获取name属性');
    }

    set name() {
        console.log('设置name属性');
    }
}
 // Class 无法实现真正意义上的私有属性,或者用Symbol,可以自己百度看看实现方式
const person = new Person();
person.name = 'abby'; // 设置name属性
console.log(person.name); // 获取name属性

3. 调用

  • 私有属性
var name = 'abby';  // 私有属性
// 在对象内部使用'var'关键字来声明,且只能被私有函数和特权方法访问
  • 公共属性
this.age = 10; // 共有属性
// 在通过实例对象调用,不能被私有函数所调用
  • 私有方法
function getName() { // 私有方法
  console.log(this, name, this.age); // this==>window
}
var functionName = function() {}
// 能被特权方法调用(包括对象的构造函数)和私有方法调用
  • 特权方法:
this.speak = function(){...}
// 1. this.特权方法() 方式来调用特权函数   2. 私有方法()方式来调用私有函数。
  • 公共方法
Person.prototype.sleep=function(){...}
// 实例对象调用
  • 原型属性
Person.prototype.contry = ''china;
// 同过实例对象调用或者ClassName.prototype.propertyName调用
  • 静态属性
Person.sex = '女';
// 不会被实例继承,只能类调用ClassName.propertyName

相关文章

网友评论

      本文标题:javascript 类的私有/公有/静态属性、方法、特权方法

      本文链接:https://www.haomeiwen.com/subject/cykhvhtx.html