`

JS OOP 包机制,类创建 的方法定义

阅读更多
/**
 * 定义包
 * @param {} ns
 * @return {}
 */
Xu.pkg = function(ns) {
	if (!ns || !ns.length) {
		return null;
	}
	var levels = ns.split(".");
	var nsobj = Xu;
	for (var i = (levels[0] == "Xu") ? 1 : 0; i < levels.length; ++i) {
		nsobj[levels[i]] = nsobj[levels[i]] || {};
		nsobj = nsobj[levels[i]];
	}
	return nsobj;
};

 

 

 // ------------------- Xu.Core.Class命名空间
Xu.pkg("Core.Class");
var SYS_DEF_CLASS_NS = 'Xu.Class.Sys' ;
var USER_DEF_CLASS_NS = 'Xu.Class.Custom' ;


/**
 * 验证类是否存在
 * @param {String} Class
 * @return {Boolean}
 */
Core.Class.isExist = function(Class){
	if (Core.Util.isFunction(Class))
		return true ;
	return false ;	
};

Core.Class.remove = function(Class){
	if (Core.Class.isExist(Class))
		Xu.pkg(Class.prototype.__pkg__)[Class.prototype.__class__] = null ;
};

Core.Class.hasProperty = function(Class,property){
	if (Core.Class.isExist(Class))
		if ( Class[property] || Class.prototype[property])
			return true ;
	return false ;
};

/**
 * 模拟类的定义 , 支持包机制,继承和多态
 * @param packageName {String} 包的名字
 * @param className {String} 类的名字
 * @param superClass {Class} 父类对象
 * @param classImp {Object} 类的实现代码
 * @param isOverride {Boolean} 是否覆盖,当类定义存在时,缺省不覆盖
 * 
 * @return {Function}
 */
Core.Class.create = function(packageName,className,superClass,classImp,isOverride){
	if (Core.Util.isNull(className) || className === ""){
		return null ;
	}
	
	isOverride = isOverride || false ;	
	try {
		var $this_class = eval(packageName + "." +className);
		if (Core.Class.isExist($this_class)) {
			trace( "isExist: " + className + " Override:" + isOverride );
			if (!isOverride){				
				return null ;			
			}
		}
	}
	catch(e){
		//如果出异常,说明该类没有定义
	}
	
	if (Core.Util.isNull(packageName) || packageName === ""){
		packageName = USER_DEF_CLASS_NS ;
	}
	$this_pkg = Xu.pkg(packageName);	
	//定义父类,将子类的原型 指向父类
	if (Core.Util.isNull(superClass) || superClass === ""){
//		superClass = Object ;
		superClass = Xu.Class.Sys.XClass ;
	}
	//定义类
	$this_class = $this_pkg[className] = function(){};
	
	// 将子类的原型 指向父类,以此获取属性继承
	$this_class.prototype = new superClass();
	Object.extend($this_class.prototype ,
		{
			'__pkg__': packageName ,
			'__superclass__': $this_class.prototype['__class__'] || 'Object',
			'__class__': className ,		
			'toString': function(){
				return "[class: " + this.__pkg__ + "." + this.__class__ + "]" ;
			}
		}
	);
	if (Core.Util.isObject(classImp)){
		 $this_class.prototype = Object.extend(
		 	$this_class.prototype,classImp);
	} 
	return $this_class ;
} ;
//定义基类, 用于框架中所创建的类的基类.
Core.Class.create(SYS_DEF_CLASS_NS,'XClass',Object,{
	'version': 'V0.1'
});

// Xu.Core.Class 测试区域
//测试 类覆盖定义 ;
//Core.Class.create(SYS_DEF_CLASS_NS,'XClass',Object,{
//	'version': 'V0.5'
//},true);
//
//// 测试 类属性检查方法 ;
//Xu.Class.Sys.XClass.ve = '2' ;
//trace(Core.Class.hasProperty(Xu.Class.Sys.XClass,'ve'));
//
////Core.Class.remove(Xu.Class.Sys.XClass);
//
//var x_class = new Xu.Class.Sys.XClass();
//trace(x_class.toString() + x_class.version );
//traceobj('XClass',Xu.Class.Sys.XClass.prototype);
////
//var XClass_ = Core.Class.create(null,'XClass_',null,{h:'hello'});
////
//var x_class_ = new XClass_();
//trace(x_class_.toString() + x_class_.version );
//traceobj('XClass_',XClass_.prototype);
////
//var X_ = Core.Class.create(null,'X_',XClass_,null);
////
//var x_ = new X_();
//trace(x_.toString() + x_.version );
//traceobj('X_',X_.prototype);





 

 

 

测试使用的,呵呵 /...

3
1
分享到:
评论
2 楼 vb2005xu 2009-11-03  
定义事件处理功能类. Core.Base.Event



/*
 * 定义事件处理功能类. Core.Base.Event
 *
 * $cpnavmenus = $clsN($TagN('body')[0],'cpnavmenu');
 *	$tEvent = new Core.Base.Event();
 *	for(var i=0;i<$cpnavmenus.length;i++){
 *		$tEvent.addEvent( $cpnavmenus[i], 'click', function(){ alert(this.id); } );
 *	}
 */

Core.Class.create('Core.Base','Event',null,{
	// event handlers
  addEvent: function( obj, type, fn ){
    if (obj.addEventListener) obj.addEventListener( type, fn, false );
    else if (obj.attachEvent) {
      obj["e"+type+fn] = fn;
      obj[type+fn] = function() {
        obj["e"+type+fn]( window.event );
      };
      obj.attachEvent( "on"+type, obj[type+fn] );
    }
  },
  removeEvent: function ( obj, type, fn ) {
    if (obj.removeEventListener) obj.removeEventListener( type, fn, false );
    else if (obj.detachEvent) {
      obj.detachEvent( "on"+type, obj[type+fn] );
      obj[type+fn] = null;
      obj["e"+type+fn] = null;
    }
  }
});

1 楼 vb2005xu 2009-11-02  

//定义特殊的 App.Data.UML.UObject 对象
Core.Class.create('App.Data.UML','UObject',null,{
	'title': null ,
	'description': null	
});
traceobj('App.Data.UML.UObject',new App.Data.UML.UObject());

//
Core.Class.create('App.Data.UML','Diagram',App.Data.UML.UObject,{
	'property': [] ,
	'methods': []
});

traceobj('App.Data.UML.Diagram',new App.Data.UML.Diagram());

相关推荐

    JS OOP包机制,类创建的方法定义

    本篇主要讨论JS OOP中的包机制以及类创建的方法。 包(Package)机制在许多编程语言中用于组织和管理代码结构,使其更易读、更易维护。在JavaScript中,由于全局作用域可能导致命名冲突,因此引入包机制可以帮助...

    javascript oop模式讲解

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

    java面向对象编程(OOP)中类的定义示例代码、对象的创建和方法的调用等基本概念.txt

    ### Java面向对象编程(OOP)中的类定义与对象操作 #### 类的定义与属性声明 在Java中,面向对象编程的基本单位是类。类是一种数据类型,它封装了属性和行为。本示例中定义了一个名为`Student`的类,用于表示学生这...

    工业自动化 TwinCAT3 OOP编程基本例程(方法,接口,属性,实现)

    比如,你可以创建一个名为“IActuator”的接口,规定所有实现此接口的类必须包含启动、停止和状态查询等方法。这样,无论实际使用哪种类型的执行器(如电机或气缸),都可以通过统一的接口进行控制,提高了代码的...

    基于OOP的PLC程序设计方法研究.pdf

    类(Class)是OOP中的基本概念,一个类可以创建多个对象,并且每个对象都有自己的状态和行为。OOP强调封装性、继承性和多态性。 PLC是一种用于工业自动化控制的电子设备,它接收来自传感器的输入信号,通过执行用户...

    【IT十八掌徐培成】Java基础第04天-02.OOP概念-定义类-创建对象.zip

    本课程由知名IT讲师徐培成讲解,旨在深入理解Java中的OOP概念,特别是如何定义类以及创建对象。 1. **面向对象编程(OOP)的基本概念**: - **封装**:隐藏对象的内部细节,只对外提供接口进行操作,以确保数据的...

    ASP OOP 系统基础类

    数据库连接类:TDB 记录集代理类: TRSProxy 页面处理类:TPage 权限控制类:TPrivilege 登录类:TLogin 配置管理类:TConfig 系统函数类:TSystem OOP之ASP应用 原创代码,技术交流,尽量勿用于商业用途,否则不...

    oop与javascript

    继承是OOP中的一个重要特性,允许创建一个新类来继承现有类的属性和方法。JavaScript通过原型链实现了继承。 ##### 3. 封装 封装是指将数据和操作这些数据的方法绑定在一起,并对外隐藏实现细节,只暴露接口供外部...

    软件工程-OOP方法学.zip

    类是创建对象的模板,定义了一组具有相同属性和行为的对象。继承则是通过一个类(子类)继承另一个类(父类)的特性,实现代码重用和结构扩展。多态性允许不同类型的对象对同一消息作出不同的响应,增强了程序的灵活...

    OOP_CODE详细代码

    1. 类的定义:展示如何创建一个类,包括属性定义和方法定义。 2. 对象的创建与使用:如何通过new关键字实例化一个对象,并调用其方法。 3. 构造函数:用于初始化对象状态的特殊方法,通常在对象创建时自动调用。 4. ...

    jsoop:Javascript 面向对象编程库

    1. **类(Class)**:JSoop引入了类的概念,允许开发者定义具有属性和方法的模板。类是创建对象的蓝图,使得代码更加模块化和可重用。 2. **构造函数(Constructor)**:在JSoop中,你可以定义构造函数来初始化新...

    JavaScript与OOP js面向对象教程.ppt

    JavaScript与OOP js面向对象教程.ppt

    js-oop.rar_control

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

    无类语言的OOP(JavaScript描述)

    除了普通的实例方法外,JavaScript还支持类方法,即定义在构造函数的`prototype`上的方法: ```javascript Light.prototype.turnOff = function() { this.state = false; }; var anOnLight = new Light(); ...

    perl oop编程

    通过这些内容,我们可以了解到Perl OOP的基本框架及其核心概念,包括如何定义类、创建对象、调用方法等。Perl的OOP虽然不像一些现代语言那样具备丰富的内置支持,但通过灵活的语法和强大的功能,仍然可以构建出高效...

    Javascript(OOP).rar_javascript_javascript O_oop javascript

    JavaScript还提供了`Object.create()`方法来创建一个具有指定原型的新对象,以及`prototype`属性来定义构造函数的原型,以便于继承: ```javascript Person.prototype.sayHello = function() { console.log('Hello...

    Java oop面向对象15章资料

    对象则是类的实例,它们拥有类定义的特性和方法。学习如何定义类,包括构造函数、成员变量和方法。 2. 封装:这是OOP的三大特性之一,通过访问修饰符(public, private, protected)来隐藏内部实现细节,只对外提供...

    jquery_js_oop

    JavaScript是一门基于原型的语言,它的对象可以直接创建,而无需预先定义类。对象可以通过字面量语法或构造函数创建。每个对象都有一个内部属性`__proto__`,它指向创建该对象的构造函数的原型。 2. **原型链** ...

    PHP面向对象编程OOP

    成员方法是类中定义的函数,它们可以操作对象的状态和行为。成员方法可以分为两种:静态方法和实例方法。静态方法属于类本身,而实例方法属于对象实例。 构造函数 构造函数是类中的一种特殊方法,用于初始化对象的...

Global site tag (gtag.js) - Google Analytics