要了解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調用公有方法、公有屬性
- 在特權方法中:通過對象本身調用靜態方法和屬性
- 在特權方法中:可以直接調用私有屬性和私有方法