oop.js
/**
* 面向对象核心类.
*
* @author bisoft
* @version 1.0 2013-07-23
*/
(function(global) {
// 强制覆盖
var override = function(s, t) {
var i;
for(i in t) {
s[i] = t[i];
}
};
// 原型继承
var extend = function(subclass, supclass, options) {
if (subclass.prototype !== Object.prototype) {
var Root0 = function() {};
Root0.prototype = supclass.prototype;
var sbp = subclass.prototype = new Root0();
sbp.constructor = subclass;
if (options) {
override(sbp, options);
}
}
};
// 定义类型
var define = function(subClassName, options) {
var supClassName = options['extend'] || 'Object';
var supclass = get(supClassName);
var subclass = options['constructor'];
// 创建原型链, 覆盖或扩展原型
extend(subclass, supclass, options);
override(subclass.prototype, {
'$className' : subClassName,
'$class' : subclass,
'$supClassName' : supClassName,
'$superClass' : supclass
});
register(subClassName, subclass);
var pkg = subClassName.indexOf('.') != -1 ? subClassName.split('.').slice(0, -1) : [];
var shortClassName = subClassName.indexOf('.') != -1 ? subClassName.split('.').slice(-1) : subClassName;
var ns = namespace(pkg);
ns[shortClassName] = subclass;
return subclass;
};
// 创建对象
var create = function(className, options) {
var cls = get(className);
var o = new cls();
// 继承父类属性
cls.prototype.$superClass.call(o, options);
// 覆盖或扩展对象
if (options) {
override(o, options);
}
return o;
};
var cache = {
'Object' : Object
};
var register = function(name, value) {
cache[name] = value;
};
var get = function(name) {
return cache[name];
};
var namespace = function(name) {
var namespaces = name.indexOf('.') != -1 ? name.split('.') : name;
var i = 0;
var pNamespace = global;
for(i in namespaces) {
var ns = namespaces[i];
if (pNamespace[ns] === undefined) {
pNamespace[ns] = {};
}
pNamespace = pNamespace[ns];
}
return pNamespace;
};
global.oop = (function() {
return {
define : define,
create : create
};
})();
})(window);
oop.define('wldm.app.Controller', {
constructor: function() {
}
});
oop.define('wldm.app.Application', {
extend : 'wldm.app.Controller',
constructor: function() {
}
});
var controller = oop.create('wldm.app.Controller');
var application = oop.create('wldm.app.Application');
console.log(controller instanceof wldm.app.Controller); // true
console.log(controller instanceof wldm.app.Application); // false
console.log(controller instanceof Object); // true
console.log(application instanceof wldm.app.Controller); // true
console.log(application instanceof wldm.app.Application); // true
console.log(application instanceof Object); // true
分享到:
相关推荐
Oop.js - Javascript 类构造 像许多其他人一样,这是我在 javascript 中创建“经典”类的尝试。 我的动机是因为我喜欢传统课程的外观。 原型类就是如此分段和冗长。 那可能有点幼稚和短视,但它对我有用,对其他人也...
**JavaScript面向对象编程(JS OOP)** JavaScript 面向对象编程(Object-Oriented Programming,简称 OOP)是 JavaScript 语言中的一个重要概念,它允许开发者创建复杂、可复用的代码结构。在 "js-oop.rar_control...
这可能通过使用内置的`ScriptEngine`接口(如JavaScript引擎)或者自定义的表达式解析器来实现。 6. **事件驱动编程**:在GUI应用中,用户输入会触发事件,比如点击按钮启动计算或绘图。Java的事件监听机制允许我们...
在JavaScript中,面向对象编程(Object-Oriented Programming, OOP)是一种常见的编程范式,它允许我们通过类和对象来组织代码,提高代码的可读性和复用性。`lang.js`是一个针对JavaScript的面向对象扩展库,专门...
JavaScript,作为一种广泛应用于Web开发的动态编程语言,其面向对象编程(Object-Oriented Programming,简称OOP)特性是理解其高级用法的关键。本文档深入探讨了JavaScript中的面向对象特性,包括类、对象、继承、...
### OOP与JavaScript详解 #### 一、面向对象编程(OOP)基础概念 面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它通过“对象”这一概念来组织程序结构,使得程序更加模块化、易于理解和维护。...
一个基于OOP风格的基于Express.js的Nodejs框架声明! 什么是mkbug.js 一个基于Express.js的OOP风格的Restful Api框架,使Node.js的开发既轻松又漂亮。 Mkbug.js VS Egg.js VS Think.js 项目 Mkbug.js Egg.js ...
【标题】"CureCoir.IncAlley-Oop.cfgsOkz" 是一个特定的配置文件或数据存储,可能是某个软件、游戏或系统的一部分。这个名称可能代表着它属于 CureCoir 公司的一个项目,"Alley-Oop" 可能是该项目的代号或者功能模块...
JavaScript与OOP js面向对象教程.ppt
OpmlParser OpmlParser是一个node.js脚本,用于将轮廓转换为... ./oop.js outline PATH-TO-FILE.opml 将OmniOutlineer .opml文件转换(将.oo3导出到.opml)到这两个文件: 逗号分隔值(.csv)文件 降价(.md)文档 CS
JavaScript OOP 课程库JavaScript 面向对象编程Telerik Academy的JavaScript OOP课程库JavaScript OOP是关于构建低级用户界面的。本课程涵盖 DOM、jQuery、事件、使用 HTML5 Canvas 和模板的图形和动画等主题课程...
- **Node.js** 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 - 它使用事件驱动、非阻塞 I/O 模型,使其轻量又高效。 **理解 Node.js 的执行模型:** - **非阻塞 I/O:** Node.js 使用非阻塞 I/O 操作,这...
Nest.js是一个基于Node.js的框架,采用TypeScript构建,结合了面向对象编程(OOP)、函数式编程(FP)和反应式编程(RxJS)的最佳实践。其主要特性有: 1. **模块化**:Nest.js遵循模块化设计,易于扩展和维护。 2....
ViaJs 一个能够涵盖基本前端应用的JS工具库 ViaJs是我在找工作时对一些基础JS功能的总结。 项目正在开发中... 包含以下功能: via.async.jsonp via.async.ajax via.event.regist via.event.on via.event.off via....
在JavaScript中,面向对象编程(OOP)是一种常用的设计模式,通过封装、继承和多态等特性来创建可复用的代码模块。在`drag.js`中,可能会定义一个名为`Draggable`的类,该类包含了开始拖动、拖动中和结束拖动的相关...
Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它允许开发者在服务器端使用JavaScript进行编程。这个"node.js手把手教程"显然旨在帮助初学者掌握Node.js的核心概念和技术,通过一个实际的博客系统项目,逐步...
3. **Nest.js**:Nest是一个渐进式Node.js框架,它结合了面向对象编程(OOP)和函数式编程的最佳实践,同时也兼容了Angular的装饰器。Nest提供了一种模块化的结构,使得大型应用的组织更加清晰。它支持依赖注入和...
JavaScript OOP(面向对象编程)模式是编程领域中一种重要的设计思想,它允许开发者通过类和对象来组织和管理代码,提高代码的可重用性和可维护性。在这个讲解中,我们将深入探讨JavaScript中的OOP模式,特别是如何...
1. **面向对象编程(OOP)**:在JavaScript中,可以使用构造函数和原型链来实现面向对象编程。通过创建一个类(或称为构造函数),我们可以封装农历转换和计算的逻辑,提供更易于理解和维护的代码。 2. **农历算法*...