日期:2014-05-16 浏览次数:20387 次
1、公共方法 public
??? 公共方法在对象的上下文中是最终用户始终可能接触到的。这种方法可以通过prototype的属性来实现。prototype包含了一个可以作为副本的base reference的对象,在对象原型中添加的的属性与方法都能由该对象的实例化对象访问,这样就做到了对象方法的公有化
//新建一个Pet构造函数(js没有类,而是构造函数) function Pet(name, type){ this.name = name; this.type = type; } //为Pet添加一个得到对象名字的方法 Pet.prototype.getName = function(){ return this.name; }; //为Pet添加一个得到对象类型的方法 Pet.prototype.getType = function(){ return this.type }; //实例化对象 var pet = new Pet("tiger","dog"); //通过get方法查看刚创建的能对象的属性 alert("name = "+pet.getName() + ", type is " + pet.getType());
2、私有方法 private
?? ?私有方法是只允许其内部的其它私有方法/变量,特权方法访问。
//创建一个Person的构造函数 function Person(name, salary) { //为其添加一个查看薪水的函数 function getSalary() { alert("this is secret"); } this.name = name; this.salary = salary; //查看一下薪水 getSalary(); } //实例一个person的对象 var person = new Person("barry",10000); try { //这里调用会出错,这是一个私有的方法,不能被访问 //所以会执行catch里的内容 proson.getSalary(); } catch (e) { alert("这是我的秘密,告诉你!"); }
3、特权方法 privileged
?? ?特权方法是指代那些用在查看并处理(对象中)私有变量的同时允许以公共方法的方式访问的方法(John Resig:精通javascript中原文)。
?
//创建一个新的User对象的构造函数 function User(name, age){ //尝试算出用户出生的年份 var year = (new Date()).getFullYear() - age; //创建一个新的特权方法,能够访问year变量,同时自身属于公共可访问的 this.getYearBorn = function(){ return year; } } //创建user对象的一个新实例 var user = new User("Bob",20); //验证返回的年份正确,这里返回true alert(user.getYearBorn() == 1990); //这里我们无法访问它的私有变量,这里返回true alert(user.year == null);?
4、静态方法
?? ?有个时候,我们不需要通过对象实例的上下文来访问某个属性或方法,而只通过主体对象本身来访问,这时可以通过静态的属性/方法就行了。在js里,静态方法/属性可以在新建构造函数时直接添加。
//给Person加上一个查看出生年月的静态方法 Person.getBirth = function(){ return "2008-8-8 08:08:08"; }; //调用这个静态方法 alert(Person.getBirthday());