浏览 1297 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-21
最后修改:2009-12-21
或者测试是否在其它浏览器存在问题! <html> <head><script> /** * 此js文件用于书写继承 * --- * 类:shape * 类:Rectangle * --- **/ function Shape() { if(typeof Shape._init =='undefined') { //成员函数 Shape.prototype.Draw = function() { return "draw a shape"; } // // Shape.prototype.ToString = function() { return "this is a shape"; } Shape.prototype.Alert = function() { alert(this.Draw() + " and " + this.ToString()); } //初始化 Shape._init = true; } } /** * 矩形类 */ //采用原型的继承必须将此句放在最前面(外面),但这样使的类封装使效. //下面语句Rectangle.prototype = new Shape()最好放在function Rectangle定义之后, //个人认为放在此前更易于理解,可理解为申明Rectangle的原型来自于Shape,但部分浏览器可能不能执行此 //代码,目前在IE7,Opera 10.10,Safari 4.0.4 上测试通过,如果您有兴趣,不妨也在此外的浏览器上测试一下, //如果可以也不妨在文章下说说测试境! //注意,如果采用Rectangle.prototype = Shape.prototype则两者为同一原型,对其的更改,将直接影响父类. //网上介绍的call,apply等方法也能实现继承吗?我测试过,但没成功,原因可能是我的写法,我总是习惯将一个js //类的所有方法体及参数写在一起. //当然这次也有例外,同样是因为下面这一句,如果您恰有方法来解决这件事,也不妨写了说说! Rectangle.prototype = new Shape(); function Rectangle() { if(typeof Rectangle._init == 'undefined') { Rectangle.prototype.Draw = function() { return "draw a rectangle"; } //初始化完成 Rectangle._init = true; } } /** * Main类 */ function Main() { Main.prototype.main = function() { var shape = new Shape(); shape.Alert(); var rectangle = new Rectangle(); alert(rectangle.ToString());//对继承的方法的检查 alert(rectangle.Draw());//对覆盖的方法的检查 rectangle.Alert();//对回调方法的检查(测试). } } var javascriptMain = new Main(); javascriptMain.main(); </SCRIPT></head> <body>onload</body> </html> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |