javascript中什么时候用静态方法什么时候用实例方法,规则是什么,各好在哪儿?
<script type="text/javascript">
/*一、静态方法和属性( 类、方法、属性都为静态类型; 不能创建实例访问)*/
var staticFunc = function(){};
staticFunc.today = new Date(); //添加静态属性
staticFunc.weather = "sunny";
staticFunc.show = function(){ //添加静态方法
alert(this.today + " weather is " + this.weather);
};
staticFunc.show(); //静态方法和属性直接访问,不能通过实例访问
alert(staticFunc.today + " is " + staticFunc.weather);
//new staticFunc().show(); //这里对staticFunc实例化会导致错误,如下图
//alert(new staticFunc().today); //这里也会发生同样的错误
/*二、普通对象,同时拥有静态和非静态属性、方法
(可以用实例化 * 注意:1.静态方法/属性使用类名访问 2.非静态方法/属性使用实例名访问 )*/
function Person(name){
this.name = name; //非静态属性
this.showName = function(){ //添加非静态方法(添加到“类”的实例上)
alert("my name is " + this.name + ".");
}
Person.run = function(){ //添加静态方法(直接添加到“类”上)
alert("I am runing... ...");
}
}
/*通过prototype关键字添加非静态属。每个人的爱好可能不一样
【1.具有相同的行为就用静态方法或属性,如人类都有一张嘴;2. 具体到每个“类”的每个实体,如每个人的兴趣爱好可能不一样,就用实例方法或属性】*/
Person.prototype.hobby = "movie,music,programming,reading.";
//添加静态属性
Person.hand = 2;
var me = new Person("zhangsan");
//非静态方法或属性必须通过实例来访问
me.showName();
alert("my hobby has " + me.hobby);
//静态方法必须通过“类”来访问
Person.run();
alert("I have " + Person.hand + " hands.");
</script>