Home » Code » javascript类的私有成员、公共成员、静态成员及特权方法

javascript类的私有成员、公共成员、静态成员及特权方法

老生常谈的问题,javascript不是面向对象的语言,没有现成的类、私有成员、继承之类的概念,但通过一些“奇技淫巧”,也能模拟出部分。下面就来看看常用到的一些。

基本概念

  • 私有属性。在“类”内(也即构造函数内)由通过var定义的变量,只能被私有方法和特权方法访问;
  • 私有方法。在“类”内定义的函数,只能被私有方法和特权方法访问;
  • 特权方法。在“类”内通过this.funcName=xxx定义,对外可见,类的实例和子类可以访问,它能访问私有属性和私有方法;
  • 公共属性。类内通过this.variableName=xxx 定义;
  • 公共方法。通过ClassName.prototype.funcName=xxx定义;
  • 原型属性。通过ClassName.prototype.propertyName = xxx定义;

例子及注释

var Person = function(name){
	this.name = name;//公有属性

	var leg = 2;//私有属性

	var showLeg = function(){
		console.log("leg:"+leg);//私有方法
	}

	this.introduce = function(){//特权方法,对外可见,可以访问公有属性和私有属性
		console.log("my name is "+this.name+",and I have "+leg+"条腿。");
		this.eat();//可以访问公共方法
	}
}
Person.prototype.cry = function(){
	console.log(this.name+"一边哭,一边介绍他自己:")+this.introduce();//公共方法能够访问特权方法
}
Person.prototype.eat = function(){
	console.log(this.name +" is eating");
}

Person.hand = 2;//静态属性
Person.showHand = function(){
	console.log(this.name);//访问不到公共属性,静态方法只能访问静态属性
	console.log("hand:"+this.hand);
	//this.eat();//更无法访问公共方法
}

var a = new Person("小明");
Person.showHand();
//a.showHand();//静态方法只能由“类”本身访问
a.cry();

//子类
var Man = function(name){
	Person.apply(this, arguments);
}
Man.prototype =  new Person();
Man.prototype.constructor = Man;

var b = new Man("小东");
b.introduce();
b.cry();
//Man.showHand();//子类同样获取不了父类的静态方法

注:受保护的属性与方法javascript中不支持

参考链接:
http://phrogz.net/JS/classes/OOPinJS.html
http://nenyalanye-1.iteye.com/blog/1042526

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Time limit is exhausted. Please reload CAPTCHA.