了解如何创建一个对象的时候,我们就需要给这个对象增加方法和属性。
在其他的书籍教程中,我们经常看到各种名称的方法,例如静态方法、实例方法等等,开始我查阅的时候就被这些说法搞的稀里糊涂的,于是自己总结了下,若有错误,还请指出。
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