1、原始的基于构造函数的类模拟方式,这是JS语法默认支持的创建类的方式
function ClassA(){
this.a = "a";
this.b = "a";
this.c = "a";
this.d = "a";
this.e = "a";
this.f1 = function(){};
this.f2 = function(){};
this.f3 = function(){};
this.f4 = function(){};
}
2、基于原型的类模拟方式,也是JS语法默认支持的
function ClassA(){
this.a = "a";
this.b = "a";
this.c = "a";
this.d = "a";
this.e = "a";
}
ClassA.prototype.f1 = function(){};
ClassA.prototype.f2 = function(){};
ClassA.prototype.f3 = function(){};
ClassA.prototype.f4 = function(){};
3、简化ClassA.prototype的书写,目的只是为了省键盘
function ClassA(){
this.a = "a";
this.b = "a";
this.c = "a";
this.d = "a";
this.e = "a";
}
var _p = ClassA.prototype; //p是prototype的首字母
_p.f1 = function(){};
_p.f2 = function(){};
_p.f3 = function(){};
_p.f4 = function(){};
4、松散的类方法定义集中到一个函数classImp中,隐藏变量_p
function ClassA(){
this.a = "a";
this.b = "a";
this.c = "a";
this.d = "a";
this.e = "a";
}
function classImp(){
var _p = ClassA.prototype;
_p.f1 = function(){};
_p.f2 = function(){};
_p.f3 = function(){};
_p.f4 = function(){};
}
classImp();
5、类具体实现函数classImp匿名化,取消不必要的全局变量
function ClassA(){
this.a = "a";
this.b = "a";
this.c = "a";
this.d = "a";
this.e = "a";
}
(function(){
var _p = ClassA.prototype;
_p.f1 = function(){};
_p.f2 = function(){};
_p.f3 = function(){};
_p.f4 = function(){};
})();
6、参数传递_p变量
function ClassA(){
this.a = "a";
this.b = "a";
this.c = "a";
this.d = "a";
this.e = "a";
}
(function(_p){
_p.f1 = function(){};
_p.f2 = function(){};
_p.f3 = function(){};
_p.f4 = function(){};
})(ClassA.prototype);
7、引入apply,取消_p变量
function ClassA(){
this.a = "a";
this.b = "a";
this.c = "a";
this.d = "a";
this.e = "a";
}
(function(){
this.f1 = function(){};
this.f2 = function(){};
this.f3 = function(){};
this.f4 = function(){};
}).apply(ClassA.prototype);
8、定义构造函数替代方法
_init,封装属性声明代码
_init方法名字来源自java class字节码文件中每个类的构造函数的的名字都是_init
这一步里面实际的构造函数被架空,慢慢被演化为一个傀儡了:)
function ClassA(){
this._init();
}
(function(){
this._init = function(){
this.a = "a";
this.b = "a";
this.c = "a";
this.d = "a";
this.e = "a";
};
this.f1 = function(){};
this.f2 = function(){};
this.f3 = function(){};
this.f4 = function(){};
}).apply(ClassA.prototype);
9、构造函数改进,实现参数传递
这样new一个类的时候,参数能够正常传递给_init这个模拟的构造函数了
function ClassA(){
this._init.apply(this, arguments);
}
(function(){
this._init = function(p1, p2){
this.a = "a";
this.b = "a";
this.c = "a";
this.d = "a";
this.e = "a";
};
this.f1 = function(){};
this.f2 = function(){};
this.f3 = function(){};
this.f4 = function(){};
}).apply(ClassA.prototype);
10、建立基础支持代码,类形式化定义最终稳定下来
function _class(className, classImp){
var clazz = (function(){
return function(){
this._init.apply(this, arguments);
};
})();
window[className] = clazz;
classImp.apply(clazz.prototype);
}
//----下面两个函数是上面的代码改进后的形式
function __newClass(){
return function(){ //<--这就是那个傀儡!
this._init.apply(this, arguments);
};
}
function _class(className, classImp){
var clazz = __newClass();
window[className] = clazz;
classImp.apply(clazz.prototype);
}
_class("ClassA", function(){
this._init = function(p1, p2){
this.a = "a";
this.b = "a";
this.c = "a";
this.d = "a";
this.e = "a";
};
this.f1 = function(){};
this.f2 = function(){};
this.f3 = function(){};
this.f4 = function(){};
});
类形式化定义,至此完成。以后可能会提供框架代码更深层的演化细节,让大家能够更好地了解alzui框架的完整的演化过程。
分享到:
相关推荐
本篇文章将深入探讨序列化和反序列化的概念,以及如何使用封装类来简化这一过程。 首先,我们需要理解什么是序列化。序列化是将一个对象的状态转换为可以存储或传输的形式,通常是XML、JSON或二进制格式。这样做的...
设计师通过尺寸图可以明确了解不同封装形式的尺寸差异,从而在产品设计阶段就考虑到封装对整体布局的影响,避免因封装尺寸不合适而导致的设计更改或生产延误。 ### 四、结论 声表产品封装形式及其尺寸规格是影响其...
内含集成电路封装形式、封装材料以及封装过程的一些介绍,图文并貌,是从事IC制程、IC封装行业入门级教程。
本文将深入探讨C++中针对UDP(用户数据报协议)和TCP(传输控制协议)的socket类封装,这对于理解和实现网络通信非常有帮助。 首先,让我们了解什么是Socket。Socket是操作系统提供的一种接口,用于在网络中进行...
在这个"USB HID通讯类封装"中,开发者已经创建了一个类,该类对HIDAPI的接口进行了封装,简化了与HID设备的交互过程。通过这个类,程序员可以更方便地读取和写入HID设备的数据,而无需深入理解底层的USB协议细节。 ...
- **日志记录**:在封装类中,创建一个静态的 `ILog` 对象,如 `private static readonly ILog log = LogManager.GetLogger(typeof(JianKunKing.Common.Log));`,然后通过这个对象调用相应级别的方法记录日志。 ###...
小外形封装(Small Outline Package,简称SO)是一种适用于集成电路的小型化封装形式,引脚分布在封装的两个长边上。 ### SSOP (Shrink Small Outline Package) 缩小型小外形封装(Shrink Small Outline Package,...
小型化、高频化、集成化的封装如QFN、DFN、BGA等正逐渐取代传统的封装形式,以满足更复杂、更高性能的电路需求。 总结,PCB封装形式的选择对于电子产品的设计和性能至关重要。了解并掌握各种封装的特点、尺寸、电气...
1、直方图分组确定 2、获取子组容量 3、获取望目值 4、获取分辨率,如果返回resolution为0,则标识数组中数据均相同 5、组距,数据有误或数据均相同时返回0 6、获取组内左边界 7、获取组内右边界 ...
1. 初始化与配置:封装类在初始化时会读取配置文件,设置Appender、Layout以及日志级别。配置文件通常采用.properties格式,可以灵活定义日志输出的路径、格式、级别等。 2. 日志级别操作:封装类会提供如debug、...
为了使用这个类封装,开发者只需实例化该类,调用相应的成员函数即可进行Excel文件的读写和高级操作,大大简化了工作流程。这个封装使得Qt应用能够轻松处理Excel数据,广泛应用于数据分析、报告生成、数据导入导出等...
2. **接口调用**:通过封装类提供的方法来调用HCNetSDK的原生接口,例如初始化设备、登录、获取视频流等。 3. **错误处理**:封装类通常会包含对SDK调用失败的异常处理,但开发者仍需确保在代码中添加适当的错误处理...
根据给定的信息,本文将对"C# 线性规划程序 类...总之,通过将线性规划算法封装成 C# 类的形式,不仅提高了代码的复用性和可维护性,还使得开发人员可以更加专注于业务逻辑的设计与实现,从而提高整体项目的开发效率。
芯片IC封装形式是将半导体集成电路芯片固定在特定的载体上,并通过一系列工艺实现电气连接,封装的目的是为了保护芯片、提供...随着电子技术的发展,封装形式也在不断演化,以适应更高性能、更小型化和更低功耗的需求。
6. **异常处理**:为了提高代码的健壮性,封装工具类会添加异常处理机制,当HTTP请求过程中出现错误时,能抛出易于理解和处理的异常,如网络连接错误、超时错误等。 7. **连接管理和配置**:HttpClient允许自定义...
在VB中,直接使用Winsock API可能会较为复杂,因此通常会将其封装成一个类,简化调用过程。 这个名为"一个Socket连接类,封装了Winsock API"的VB类,可能包含以下核心功能: 1. 初始化与配置:类的初始化通常涉及...
从“结构”到“类” 类的成员数据与成员函数 成员数据初始化的疑问 成员函数的实现 封装 私有成员/private member 保护成员/protected member 公有成员/public member 封装”的作用 作业
本工程源码,基于rapidjson实现二次封装,使C++序列化一个类的变得代码非常小,耦合性非常低,且不损失原有序列化性能。详细使用可关联本人博客:http://blog.csdn.net/lightspear/article/details/54836656
一个经过封装的类,封装.NET原有的Serial Port控件,拥有更加灵活的使用。
- 头文件中的使用说明可能包含了如何实例化封装类,如何调用成员方法,以及如何处理返回的Recordset对象等信息。例如,如何打开连接: ```cpp MyADOCPPWrapper wrapper; wrapper.OpenConnection("DSN=...