js面向对象之公有、私有 、静态方法和属性,以及特权方法

要了解js面向对象,就必需先了解js中什么是公有方法、特权方法、静态方法

下面的例子中包含了各种方法和属性定义,以及方法和属性的调用
  • 先上代码:
function User(name,pass,age){
    // 公有属性
    this.name=name;
    this.pass=pass; 

    //静态属性和方法
    User.sex="男";
    User.getSex=function(){
        return this.sex;
    };
    // 私有属性
    var age=age;  

    // 私有方法
    function privateFun(){  
        return age;
    }

    // 特权方法 : 用来访问私有变量和私有函数的 公有方法
    this.publicFun=function(){
        age ++ ;
        return privateFun();
    };
}
// 公有方法
User.prototype.getName=function(){  
    return this.name;
};
// 调用静态属性
User.prototype.getSex=function(){
    return User.sex;
};
// 调用公有方法   需要实例化
var user=new User('czj',123456,24);
console.log(user.getName());  // czj
console.log(user.publicFun()); // 25
console.log(user.getSex());  // 男
// 调用静态方法   不需要实例化
console.log(User.getSex());  // 男
console.log(user.__proto__ == User.prototype); // true
console.log(User.prototype);
// {getName:ƒ (), constructor:ƒ User(name,age), __proto__:Object}
  • 公有方法 的调用规则
    • 调用公有方法,需要先 实例化对象
      var user=new User('czj',123456,24);
    • 在公有方法中:通过 this 调用公有属性和特权方法
    • 在公有方法中:通过 对象本身 调用静态方法和属性,不使用this

      // 调用静态属性
      User.prototype.getSex=function(){
      return User.sex;
      };
    • 在公有方法中:不能调用私有方法和属性
  • 静态方法的调用规则

    • 调用静态方法:无需实例化对象,对象本身调用即可
    • 在静态方法中:无法调用公有属性、公有方法、私有方法、私有属性、特权方法和原型属性
    • 静态属性和方法还可以使用 对象字面量 来定义

      var user = {
           _init:function(name,age){
               this.name = name;
               this.age = age;
           },
           getName:function(){
               return this.name;
          }
      }
      user._init('chenzhijie',25);
      console.log(user.getName()); // chenzhijie
      
  • 私有 方法和属性

    • 调用私有方法:对象的私有方法和属性,外部无法访问
    • 在方法的中: 不能通过this 调用对象的公有方法、公有属性、特权方法, 直接调用即可,静态属性和方法还是需要通过对象本身调用
  • 特权方法 的调用规则
    • 在特权方法中: 通过this调用公有方法、公有属性
    • 在特权方法中:通过对象本身调用静态方法和属性
    • 在特权方法中:可以直接调用私有属性和私有方法

你可能感兴趣的:(js)