javascript基础学习(五)
利用调用继承的关键只有一步操作:
就是在子类定义时,通过父类的 call 方法,将子类的 this 指针传入。使父类方法在子类上下文中执行。
这样,父类中的所有在父类内部通过 this 方式定义的公有实例成员都会被子类继承。
用 instanceof 运算符判断时,子类的实例化对象只属于子类,不属于父类。
查看子类的实例化对象的 constructor 属性时,看到的是子类的定义,不是其父类的定义。
接下来,通过对 o.method1() 和 o.method2() 调用的结果跟原型继承法的调用结果是相同的,所说明的问题也是一样的,这里不再重复。
通过对 o.method() 调用的结果我们看到,定义在父类原型上的方法,不会被子类继承。
通过对 o.method3() 调用的结果我们看到,子类中定义的实例方法同样不能访问父类中定义的私有实例成员的。
最后,通过对 subClass.staticMethod() 调用的结果我们看到,静态成员同样不会被继承的。
最后,还有一点,在这个例子中没有体现出来,就是通过调用继承法,可以实现多继承。也就是说,一个子类可以从多个父类中继承通过 this 方式定义在父类内部的所有公有实例成员。
作为一种弱类型语言,javascript 提供了丰富的多态性,javascript 的多态性是其它强类型面向对象语言所不能比的。
多态
重载和覆盖
先来说明一下重载和覆盖的区别。重载的英文是 overload,覆盖的英文是 override。发现网上大多数人把 override 当成了重载,这个是不对的。重载和覆盖是有区别的。
重载的意思是,同一个名字的函数(注意这里包括函数)或方法可以有多个实现,他们依靠参数的类型和(或)参数的个数来区分识别。
而覆盖的意思是,子类中可以定义与父类中同名,并且参数类型和个数也相同的方法,这些方法的定义后,在子类的实例化对象中,父类中继承的这些同名方法将被隐藏。
重载
javascript 中函数的参数是没有类型的,并且参数个数也是任意的,例如,尽管你可以定义一个:
function add(a, b) {
return a + b;
}
这样的函数,但是你仍然可以再调用它是带入任意多个参数,当然,参数类型也是任意的。至于是否出错,那是这个函数中所执行的内容来决定的,javascript 并不根据你指定的参数个数和参数类型来判断你调用的是哪个函数。
因此,要定义重载方法,就不能像强类型语言中那样做了。但是你仍然可以实现重载。就是通过函数的 arguments 属性。例如:
function add() {
var sum = 0;
相关文档:
.h 文件
class CHtmlSkinDlg : public CDHtmlDialog
{
。。。。。
DECLARE_DISPATCH_MAP()
// !!! 覆盖基类的这个方法
BOOL CanAccessExternal()
{
......
1. <script language="LiveScript">
document.write("这是以 JavaScript 印出的!")
</script>
2. <script language="LiveScrip ......
javascript面向对象继承的三种方法:
<
html xmlns
=
"
http://www.w3.org/1999/xhtml
"
>
<
head runat
=
"
server
"
>
<
title
>
Untitled Page
</
title ......
这种新式的技术最先由jQuery搞出来的,接着Prototype与mootools都支持了。这技术兴起的原因是浏览器嗅探技术是不太可靠,如UserAgent很容易被伪造,如IE8的UserAgent就把许多浏览器的关键字包含进去,造成辩识困难。其他一些重要辩识手段,由于浏览器厂商对旧版本的升级与不断推进新版本,许多都无效了。由于浏览器种类越来 ......
定义
Javascript是一种解释性的,基于对象的脚本语言(an interpreted, object-based scripting language)。
HTML网页在互动性方面能力较弱,例如下拉菜单,就是用户点击某一菜单项时,自动会出现该菜单项的所有子菜单,用纯HTML网页无法实现;又如验证HTML表单(F ......