《Javascript权威指南》学习笔记之八:静态成员、静态类、枚举、重载和覆盖
2014-05-24 14:31
381 查看
一、创建静态成员
直接将属性或者方法赋给类本身
Google中运行结果:
![](http://img.blog.csdn.net/20140524130958765?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTA0Mzg0Mw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
也可以改为this.sex访问,结果相同。但是不可以用this.myname/this,age访问实例属性。
二 、注意事项
2.1 静态成员一般是公共成员,不能被继承,但可以在子类中直接使用
2.2 JS中允许定义同名的静态属性和实例属性,二者互相独立
运行结果:
![](http://img.blog.csdn.net/20140524130958765?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTA0Mzg0Mw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2.3 静态方法中不能访问实例属性,且不能使用关键字super,但是实例方法可以访问静态属性和实例属性
运行结果:
![](http://img.blog.csdn.net/20140524131834265?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTA0Mzg0Mw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2.4 如果一个类的成员全是静态成员,则这个类是静态类,不能被实例化。
三 、枚举:一组静态常量
四、重载和覆盖
4.1 重载:在JS中,不允许有两个同名的方法,且参数没有数据类型,所以JS中的重载是通过参数的个数不同实现的
运行结果
![](http://img.blog.csdn.net/20140524133353437?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTA0Mzg0Mw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
4.2 覆盖:用于继承中,指子类中定义了与父类中同名的方法,父类的同名方法被隐藏
运行结果:
直接将属性或者方法赋给类本身
function Person(name,age) { this.myname = name; this.age = age; } Person.showInfo = function() //静态方法,只能访问静态属性 { return ("我的性别是:"+Person.sex); }; var per = new Person("yuan",20); Person.sex = "男"; //静态属性 alert(Person.showInfo());
Google中运行结果:
也可以改为this.sex访问,结果相同。但是不可以用this.myname/this,age访问实例属性。
二 、注意事项
2.1 静态成员一般是公共成员,不能被继承,但可以在子类中直接使用
2.2 JS中允许定义同名的静态属性和实例属性,二者互相独立
function Person(name,age,sex) { this.myname = name; this.age = age; this.sex = sex; } Person.showInfo = function() //静态方法,只能访问静态属性 { return ("我的性别是:"+Person.sex); }; var per = new Person("yuan",20,"女"); Person.sex = "男"; //静态属性 alert(Person.showInfo());
运行结果:
2.3 静态方法中不能访问实例属性,且不能使用关键字super,但是实例方法可以访问静态属性和实例属性
function Person(name,age,sex) { this.myname = name; this.age = age; this.sex = sex; } Person.prototype.showInfo = function() //实例方法 { return ("我的性别是:"+Person.sex+"\n我的年龄是:"+this.age); }; var per = new Person("yuan",20,"女"); Person.sex = "男"; //静态属性 alert(per.showInfo());
运行结果:
2.4 如果一个类的成员全是静态成员,则这个类是静态类,不能被实例化。
三 、枚举:一组静态常量
function Day() { throw new Error("这是静态类,不能实例化"); } Day.MONDAY = 1; Day.TUE = 2; Day.WED = 3; var date = new Date(); var day = date.getDay(); switch(day) { case Day.MONDAY: alert("周一"); break; case Day.TUE: alert("周二"); break; case Day.WED: alert("周三"); break; }
四、重载和覆盖
4.1 重载:在JS中,不允许有两个同名的方法,且参数没有数据类型,所以JS中的重载是通过参数的个数不同实现的
function OverLoad() { this.method = function() { var len = arguments.length; if(len == 2) { document.write("正在调用的是两个参数的方法<br/>"); } else if(len == 3) { document.write("正在调用的是三个参数的方法"); } } } try { var over = new OverLoad; over.method(1,2); over.method(1,2,3); } catch(err) { document.write(err); }
运行结果
4.2 覆盖:用于继承中,指子类中定义了与父类中同名的方法,父类的同名方法被隐藏
//父类 function Father(myName,age) { this.myname = myName; this.age = age; } Father.prototype.show = function() { return("Father's name: "+this.myName+", and age: "+this.age); }; //子类 function Child(myName,age) { this.$super = Father; //继承父类 this.$super(myName,age); //调用父类的构造方法 this.show = function() { return ( "Child's age: "+this.age); }; } Child.prototype = new Father(); var child = new Child("yuan",20); alert(child.show());
运行结果:
相关文章推荐
- 《Javascript权威指南》学习笔记之八:静态成员、静态类、枚举、重载和覆盖
- 《Javascript权威指南》学习笔记之八:静态成员、静态类、枚举、重载和覆盖
- net学习之类与对象、new关键字、构造函数、常量和只读变量、枚举、结构、垃圾回收、静态成员、静态类等
- C++语言特性:构造函数,析构函数,虚函数,内联函数,静态成员函数,重载,覆盖,隐藏
- 构造函数,析构函数,虚函数,内联函数,静态成员函数,重载,覆盖,隐藏
- .net学习之类与对象、new关键字、构造函数、常量和只读变量、枚举、结构、垃圾回收、静态成员、静态类等
- 成员函数的重载、覆盖与隐藏
- C++成员函数的重载、覆盖与隐藏
- 类成员函数的重载、覆盖和隐藏区别?
- C++成员函数的 重载、隐藏、覆盖分析
- 成员函数的重载、覆盖与隐藏
- C#——面向对象——静态成员和静态类——静态类
- 类成员函数的重载、覆盖和隐藏(重写)的区别
- C++ 类成员函数重载(overload), 覆盖、重写(overrider), 隐藏(hidden)
- C++成员函数重载、覆盖和隐藏的区别
- C# 静态成员 静态方法 静态类
- c++成员函数的重载、覆盖、隐藏区别
- 成员函数的重载、覆盖与隐藏
- <转>成员函数的重载、覆盖与隐藏
- 静态成员-静态方法-静态类