类式继承对于大部分开发者来说都已经熟悉,只要有了带方法(method)的类(class)就可以把他们实例化(instantiate)为对象.
下面就有一个简单的方法来模拟类式继承.代码清单如下:
<script>
//
辅助函数 定义
Function.prototype.method
=
function
( name,func ){
this
.prototype[name]
=
func;
return
this
;
}
//
实现函数
Function.method(
‘
inherits
‘
,
function
(parent){
//
记录我们目前所在父层次的级数
var
depth
=
0
;
//
继承父对象的方法
var
proto
=
this
.prototype
=
new
parent();
//
特权函数
this
.method(
‘
uber
‘
,
function
uber(name){
var
func;
var
ret;
var
v
=
parent.prototype;
//
如果我们已经在某个 ‘uber’ 函数之内
if
(depth){
for
(
var
i
=
d; i
>
0
;i
+=
1
) {
v
=
v.constructor.prototype;
};
//
从该prototype中或得函数
func
=
v[name];
}
else
{
//
从prototype获得要执行的函数
func
=
prototype[name];
//
如果此函数属于当前的prototype
if
( func
==
this
[name]){
//
则改为调用父对象的prototype
func
=
v[name];
}
}
//
记录我们在继承堆栈中所在位置的级数
depth
+=
1
;
//
ret
=
func.apply(
this
,Array.prototype.slice.apply(arguments,[
1
]));
//
恢复继承堆栈
depth
-=
1
;
return
ret;
});
return
this
;
})
//
只继承父对象特定函数的函数
Function.method(
‘
swiss
‘
,
function
(parent){
for
(
var
i
=
1
; i
<
arguments.length; i
++
) {
var
name
=
arguments[i];
//
将此方法导入this对象的prototype
this
.prototype[name]
=
parent.prototype[name];
};
return
this
;
})
function
Person( name ){
this
.name
=
name;
}
//
实现的例子
Person.method(
‘
getName
‘
,
function
(){
return
name;
})
function
User( name, password ){
this
.name
=
name;
this
.password
=
password;
}
User.inherits( Person );
<
/
script>
下面重点讲解一下,上面的三个函数
1.Function.prootype.method:它提供了一个简单的方法,把函数与构造函数的原型关联起来;之所以有效,是因为所有的构造函数本身都是函数,所以能获得”method”这个新方法;
来自:小贺
2.Function.prototype.inherite: 这一函数可以提供简单的对象继承,他的代码主要围绕在任意方法中调用this.uber(‘methodName’)为中心,并在让这个uber方法去执行他要覆盖的父对象.这是javascript继承模型中并未内建的部分.
3. Functon.prototype.swiss:这是.method()函数的增强版,可以用于从单一父对象获取多个函数.如果用在多个父对象上就能能获得可用的多对象继承.
1.本站内容仅供参考,不作为任何法律依据。用户在使用本站内容时,应自行判断其真实性、准确性和完整性,并承担相应风险。
2.本站部分内容来源于互联网,仅用于交流学习研究知识,若侵犯了您的合法权益,请及时邮件或站内私信与本站联系,我们将尽快予以处理。
3.本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
4.根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
5.本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途
暂无评论内容