以下,演示了一个js的继承实现,但比竟个人力量有限,请大家共同讨论,是否还有更好的方式来实现.
或者测试是否在其它浏览器存在问题!
<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>
分享到:
相关推荐
2. 对象与原型:JavaScript是一种基于对象的语言,书中会深入探讨对象的概念,包括对象创建(字面量、构造函数、工厂函数)、属性和方法、原型链、继承机制等。 3. 函数与闭包:深入讲解函数的使用,如函数表达式、...
JavaScript是一种广泛应用于网页和网络应用的编程语言,尤其在客户端的动态交互方面有着不可或缺的地位。本教程"javascriptjiaocheng.rar"旨在帮助学习者深入理解并熟练掌握JavaScript的核心概念和实际应用。 教程...
在JavaScript中,EventEmitter或事件监听器是常见的实现方式。 11. **命令模式**:将请求封装为一个对象,以便使用不同的请求、队列请求或支持可撤销的操作。 12. **职责链模式**:让多个对象都有机会处理请求,...
首先,我们要了解JavaScript是一种解释型的、弱类型的、基于原型的、动态类型的脚本语言,广泛应用于网页和网络应用开发。在第六版中,作者更新了大量的内容,以反映自第五版以来JavaScript语言的重大变化和发展,...
因为它们允许开发者站在众多先行者的肩膀上,吸取他们宝贵的经验,从而以一种优化的方式构建代码。此外,设计模式还为我们提供了一种共通的词汇来描述解决方案,这在我们试图向他人传达如何在代码中构建解决方案时,...
《JavaScript语言精粹》不仅是一本技术书籍,更是一种思维方式的传递。通过学习本书,开发者不仅能掌握JavaScript的核心知识,还能学会如何用批判的眼光审视这门语言,从而更好地利用其优势,避免不足之处。对于希望...
在JavaScript中实现继承的一种常见方式是通过原型链。具体步骤如下: 1. **定义父类**:首先定义一个父类,包含了一些共享的方法或属性。 ```javascript function Parent() { // 构造函数 } Parent.prototype ...
Yarn是Facebook、Google、Expo和Tilde等公司共同开发的JavaScript包管理器,它为开发者提供了一种快速、可靠且安全的方式来管理和安装项目依赖。Yarn通过使用锁定文件(如yarn.lock)来确保每次安装的依赖包版本一致...
JavaScript是一种动态类型的弱类型语言,这意味着变量可以随时改变其数据类型。它支持基本类型(如字符串、数字和布尔值)以及复杂类型(如对象和数组)。理解这些类型对于编写高效代码至关重要。 接着,我们将讨论...
的另一种JavaScript实现** - 提供了一种新颖的方式来展示Hello World程序。 - **1.4.3 数据交互--JavaScript的一项强大功能** - 解释了JavaScript如何通过Ajax等技术进行前后端通信。 - **1.4.4 JavaScript表面...
综上所述,JavaScript宝典第四版会涵盖以上所有知识点,并可能更深入地讨论每个主题,包括最佳实践、常见陷阱以及性能优化策略。无论你是Web开发新手还是有经验的开发者,这本书都能为你提供宝贵的资源和指导。通过...
JavaScript是一种解释型的、弱类型的、基于原型的语言,它主要用于为网页添加交互性。通过学习JavaScript,开发者可以创建动态网页,实现用户输入验证、页面元素操作、异步通信(AJAX)以及复杂的前端应用。 手册...
1. **箭头函数**:箭头函数是ES6引入的一种简洁的函数定义方式,它改变了传统的function关键字定义函数的方式,使得代码更加紧凑。箭头函数的关键特点包括没有自己的this值,而是继承自上下文,这解决了回调函数中...
本资源"ios-Json 转 模型一行代码 (优化了上一个版本).zip"提供了一种简洁的方法来实现JSON数据到模型对象的转换,特别是对于继承自NSObject的模型类,可以一键式解决解析问题。这个优化过的版本很可能改进了性能...
1. **箭头函数**:箭头函数是ES6中的一种新的函数定义方式,它拥有更简洁的语法,并且改变了`this`的指向,使得在处理回调函数时避免了`this`的混淆问题。 2. **模板字符串**:模板字符串用反引号(`)包裹,可以方便...
- **概念介绍**:解释了JavaScript作为一种多范式语言,支持函数式编程的特点,包括高阶函数、闭包等。 - **实践技巧**:演示了如何利用这些特性编写简洁高效的代码。 - **闭包**: - **定义与作用**:深入探讨...
6. **JavaScript特性的应用**:讨论JavaScript的动态性、原型继承和闭包等特性如何与设计模式相结合,以及如何利用这些特性来优化和改进设计模式的实现。 7. **实战场景**:书中可能会包含实际项目中的应用场景,...