要了解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调用公有方法、公有属性
- 在特权方法中:通过对象本身调用静态方法和属性
- 在特权方法中:可以直接调用私有属性和私有方法