JS中对象中的国有方法、私有方法、特权方法

JS中对象中的公有方法、私有方法、特权方法

了解如何创建一个对象的时候,我们就需要给这个对象增加方法和属性。

在其他的书籍教程中,我们经常看到各种名称的方法,例如静态方法、实例方法等等,开始我查阅的时候就被这些说法搞的稀里糊涂的,于是自己总结了下,若有错误,还请指出。

1、静态方法和属性
静态方法既只允许父类调用,其他的实例均无法访问和调用的方法和属性。

var user = function(age){
    // 变量age 是user对象的私有属性
    var age = age;
}
 
// user.age 是user对象的静态方法
user.age = function(){
    return this.age;
}
 
// 当我们将user对象实例化的时候
// zhangsan 无法使用 user 对象中
// 的 age方法
var zhangsan = new user(18);
 
// 实例中没有继承user对象的age方法
alert(!!zhangsan.age == false);

2、公共方法
公共方法既依此父类生成的所有实例均可以使用的方法。

var user = function(name,age){
    // 公共变量
    this.name = name;
    this.age = age;
}
 
// 公共方法
user.prototype = {
    getInfo: function(){
        return "他的名字叫:" +this.name+ ",他的年龄是:" +this.age;
    }
}
 
// 当我们将user对象实例化的时候
var zhangsan = new user("zhangsan",18);
 
// getInfo() 就是user对象的公共方法 name\age 既user对象的公共变量
alert(zhangsan.getInfo() == "他的名字叫:zhangsan,他的年龄是:18");
alert(zhangsan.name == "zhangsan");
alert(zhangsan.age == 18);

3、私有方法
私有方法是只有父类可以访问的方法和属性,他与静态方法一致,只是表现形式不一样。构造器中的var变量和参数都是私有方法。

var user = function(age){
    // age 是user对象的私有属性
    var age = age;
 
    // getAget 是user对象的私有方法
    function getAge(){
        return age;
    }
}
 
var zhangsan = new user(18);
 
// 实例中不包含user对象的age属性
// 及getAge方法;
alert(zhangsan.age == undefined);
alert(zhangsan.getAge == undefined);

4、特权方法
当父类中的某一个公共方法可获取父类中的私有方法,同时我们无法修改该方法(可以删除、替换),我们称这种方法为特权方法。
可以访问私有方法,并且在公共域中可见的方法称为特权方法。特权方法不可被修改,只能替换或者删除。

var user = function(age){
    // age 是user对象的私有属性
    var age = age;
 
    // 创建一个特权方法用来获取
    // user 对象下的私有属性age
    this.getInfo = function(){
       return age;
    }
}
 
var zhangsan = new user(18);
alert(zhangsan.getInfo() == 18);

参考资料:http://javascript.crockford.com/private.html