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調用公有方法、公有屬性
    • 在特權方法中:通過對象本身調用靜態方法和屬性
    • 在特權方法中:可以直接調用私有屬性和私有方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章