Ext.extend详细解析

以下js是复制官网 Ext2.0.2版本的源码,进行的测试!

<script type="text/javascript">
/**
必备知识点:
1、通过一个类实例访问属性、方法时,进行如下搜索:一、搜索实例中的内容。二、搜索该类原型链中内容。三、向上搜索父类原型链,直到顶端父类。
2、子类和父类在原型链上的关系是StudentClass.prototype._proto_ == PersonClass.prototype,链接是通过_proto_这个属性来完成的。_proto_是一个只读的属性,只能通过构造函数写入(如3)。
3、一个对象的_proto_要指向某个构造函数的原型,需要让这个对象由那个构造函数构造,那么StudentClass.prototype = new PersonClass()就可以了,这个时候StudentClass.prototype._proto_ == PersonClass.prototype,
4、原型还有一个属性constructor指向原型所在的构造器,由于StudentClass.prototype刚被PersonClass创建出来,还没有这个属性,我们要手动赋值上去,StudentClass.prototype.constructor = StudentClass这样extend的责任就完成了。
5、Ext.extend其实并没有直接使用父类PersonClass完成继承,而是通过一个代理类F 获得PersonClass原型,完成的继承。
*/
Ext = {
version : "2.0.2"
};
/*模拟官网的apply*/
Ext.apply = function(C, D, B) {
if (B) {
Ext.apply(C, B);
}
if (C && D && typeof D == "object") {
for ( var A in D) {
C[A] = D[A];
}
}
return C;
};
/*父类*/
PersonClass = function() {
/*私有属性*/
var PName = "moline";
/*私有方法*/
var PMethod=function (){console.log(Tname);};
return {
/*公共方法:这些公共方法不在原型链上,初始化(即调用构造函数PersonClass)时返回的一个对象,它在实例对象中,属于实例中的内容。所以子类继承不了*/
getName : function() {
return PName;
},
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值