`

oop.js

 
阅读更多
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:浏览器的经典面向对象编程

    Oop.js - Javascript 类构造 像许多其他人一样,这是我在 javascript 中创建“经典”类的尝试。 我的动机是因为我喜欢传统课程的外观。 原型类就是如此分段和冗长。 那可能有点幼稚和短视,但它对我有用,对其他人也...

    js-oop.rar_control

    **JavaScript面向对象编程(JS OOP)** JavaScript 面向对象编程(Object-Oriented Programming,简称 OOP)是 JavaScript 语言中的一个重要概念,它允许开发者创建复杂、可复用的代码结构。在 "js-oop.rar_control...

    oop.rar_java坐标图

    这可能通过使用内置的`ScriptEngine`接口(如JavaScript引擎)或者自定义的表达式解析器来实现。 6. **事件驱动编程**:在GUI应用中,用户输入会触发事件,比如点击按钮启动计算或绘图。Java的事件监听机制允许我们...

    Javascript面向对象扩展库(lang.js)

    在JavaScript中,面向对象编程(Object-Oriented Programming, OOP)是一种常见的编程范式,它允许我们通过类和对象来组织代码,提高代码的可读性和复用性。`lang.js`是一个针对JavaScript的面向对象扩展库,专门...

    Javascript(OOP).rar_javascript_javascript O_oop javascript

    JavaScript,作为一种广泛应用于Web开发的动态编程语言,其面向对象编程(Object-Oriented Programming,简称OOP)特性是理解其高级用法的关键。本文档深入探讨了JavaScript中的面向对象特性,包括类、对象、继承、...

    oop与javascript

    ### OOP与JavaScript详解 #### 一、面向对象编程(OOP)基础概念 面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它通过“对象”这一概念来组织程序结构,使得程序更加模块化、易于理解和维护。...

    mkbug.js:一个基于expressjs的OOP风格的Node.js Web框架

    一个基于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.IncAlley-Oop.cfgsOkz" 是一个特定的配置文件或数据存储,可能是某个软件、游戏或系统的一部分。这个名称可能代表着它属于 CureCoir 公司的一个项目,"Alley-Oop" 可能是该项目的代号或者功能模块...

    opmlparser:OpmlParser是一个node.js脚本,用于将OmniOutliner轮廓转换为CSV和Markdown文件,并自动将任务加载到Trello板上

    OpmlParser OpmlParser是一个node.js脚本,用于将轮廓转换为... ./oop.js outline PATH-TO-FILE.opml 将OmniOutlineer .opml文件转换(将.oo3导出到.opml)到这两个文件: 逗号分隔值(.csv)文件 降价(.md)文档 CS

    Packt.Learning.Node.js.for.NET.Developers.2016

    - **Node.js** 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 - 它使用事件驱动、非阻塞 I/O 模型,使其轻量又高效。 **理解 Node.js 的执行模型:** - **非阻塞 I/O:** Node.js 使用非阻塞 I/O 操作,这...

    高考志愿填报系统,前台VUE3,后端node.js配置nest.js框架.zip

    Nest.js是一个基于Node.js的框架,采用TypeScript构建,结合了面向对象编程(OOP)、函数式编程(FP)和反应式编程(RxJS)的最佳实践。其主要特性有: 1. **模块化**:Nest.js遵循模块化设计,易于扩展和维护。 2....

    ViaJs:一个能够涵盖基本前端应用的JS工具库

    ViaJs 一个能够涵盖基本前端应用的JS工具库 ViaJs是我在找工作时对一些基础JS功能的总结。 项目正在开发中... 包含以下功能: via.async.jsonp via.async.ajax via.event.regist via.event.on via.event.off via....

    js应用(Drag.js)

    在JavaScript中,面向对象编程(OOP)是一种常用的设计模式,通过封装、继承和多态等特性来创建可复用的代码模块。在`drag.js`中,可能会定义一个名为`Draggable`的类,该类包含了开始拖动、拖动中和结束拖动的相关...

    node.js手把手教程

    Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它允许开发者在服务器端使用JavaScript进行编程。这个"node.js手把手教程"显然旨在帮助初学者掌握Node.js的核心概念和技术,通过一个实际的博客系统项目,逐步...

    node.js服务器框架

    3. **Nest.js**:Nest是一个渐进式Node.js框架,它结合了面向对象编程(OOP)和函数式编程的最佳实践,同时也兼容了Angular的装饰器。Nest提供了一种模块化的结构,使得大型应用的组织更加清晰。它支持依赖注入和...

    javascript oop模式讲解

    JavaScript OOP(面向对象编程)模式是编程领域中一种重要的设计思想,它允许开发者通过类和对象来组织和管理代码,提高代码的可重用性和可维护性。在这个讲解中,我们将深入探讨JavaScript中的OOP模式,特别是如何...

    js农历,javascript 农历,面向对象编程、支持生肖、年号等

    1. **面向对象编程(OOP)**:在JavaScript中,可以使用构造函数和原型链来实现面向对象编程。通过创建一个类(或称为构造函数),我们可以封装农历转换和计算的逻辑,提供更易于理解和维护的代码。 2. **农历算法*...

    OOP:使用p5.js进行游戏开发的面向对象编程(OOP)

    使用p5.js进行面向对象的游戏开发 p5.j​​s用于游戏开发的面向对象编程(OOP) 在本课程中,我们使用JavaScript库及其Java版本 。 以下是课程步骤: 课程步骤 步骤1:一个实例 一实例+功能向右移动。 。 步骤2...

Global site tag (gtag.js) - Google Analytics