对象系统有三种实现方式:
1、基于类(class-based)
2、基于原型(prototype-based)
3、基于元类(metaclass-based)
后两种并不是很熟悉哦,ruby是基于元类的实现吗?
原型继承是JavaScript最重要的语言特性之一。
JS没有类的概念,
它使用构造器机制实现类的某些功用。
原型继承是 JS
对象系统中最关键的元素。
以后如果有机会深入探究,各种 对象系统,其实现应该都是有相通之处的吧。
对象的继承机制中,用到了 原型链。
查找对象元素,可能要用到回溯。
SpiderMonkey还实现了复杂的对象成员性质管理,即可见性,公有、私有等属性的管理。(这个真的很复杂吗?)
一个对象重写了父类的对象后,这个方法就标记为可delete了,同时在对象的属性列表中会保存父类中该成员的信息,
如果删除子类中该属性之后, 将重新使用父类的值与性质。
刚才编辑的东西怎么没有了? 每次发布之前,要先保存下才稳妥啊。。。
ExtJS对JavaScript几个基本类的扩展都写在Ext.js里面了。
如下是对Function对象的扩展:
Ext.apply(Function.prototype,{
createCallback : function(){...},
createDelegate : function(
obj, args, appendArgs){...},
defer : function(
millis, obj, args, appendArgs){...},
createSequence : function(
fcn, scope){...},
createInterceptor : function(
fcn, scope){...}
}); // 扩展Function类的原型后,所有的函数都具有 扩展的属性了? Ext.apply在Ext Element中已经引用到,不过有个default参数,可以把配置对象里的所有属性拷贝到 目标对象中。
不过 直接的 Ext.apply有定义吗?或者 JavaScript本身便支持这种语法?
Ext.js中有一个很长的语句, (function(){.... // 这里面定义了很多东西,大约有700多行}),
最外面的是强制执行标识吗?这个可以测试下的。