201506021403_《JavaScript完美甘露模型代码》

//JavaScript完美甘露模型代码
function Class() {
var aDefine = arguments[arguments.length-1];
if(!aDefine) return;
//解析基类
var aBase = arguments.length > 1?arguments[0]:object;
//临时函数,用于挂接原型链
function prototype_() {};
//准备传递基类
prototype_.prototype = aBase.prototype;
//建立类要用的prototype
var aPrototype = new prototype_();
//复制类定义到当前的prototype
for(var menber in aDefine)
//构造函数不用复制
if (menber!="Create")
aPrototype[menber] = aDefine[menber];

//根据具体是否继承特殊属性和性能情况,分别注释下列语句
if(aDefine.toString != Object.prototype.toString)
aPrototype.toString = aDefine.toString;
if(aDefine.toLocaleString != Object.prototype.toLocaleString)
aPrototype.toLocaleString = aDefine.toLocaleString;
if(aDefine.valueOf != Object.prototype.valueOf)
aPrototype.valueOf = aDefine.valueOf;

//若有构造函数
if(aDefine.Create) {
var aType = aDefine.Create;
}else
aType = function() {
//调用基类的构造函数
this.base.apply(this,arguments);
};
//设置类的prototype
aType.prototype = aPrototype;
//设置类型关系,以便追溯继承关系
aType.Base = aBase;
//为本类对象扩展一个Type属性
aType.prototype.Type = aType;
//返回构造函数作为类
return aType;
};

//根类object定义
//定义小写的object根类用于实现最基础的方法
function object() {};
object.prototype.isA = function(aType) {
var self = this.Type;
while(self) {
if(self == aType) return true;
self = self.Base;
};

return false;
};

//调用基类构造函数
object.prototype.base = function() {
//获取当前对象的基类
var Base = this.Type.Base;
//若基类已经没有基类
if(!Base.Base){
Base.apply(this,arguments);
}else {
//若基类还有基类
//1.先覆写字this.base
this.base = MakeBase(Base);
//2.再调用基类的构造函数
Base.apply(this,arguments);
//3.删除覆盖的base属性
delete this.base;
};

//包装基类的构造函数
function MakeBase(Type) {
var Base = Type.Base;
//如果基类已无基类,则无需包装
if(!Base.Base) return Base;
//否则应用临时变量Base的构造函数
return function() {
//1.先覆写this.base
this.base = MakeBase(Base);
//2.再调用基类的构造函数
Base.apply(this,arguments);

};
};
};

/**
*
*====================使用=========================
*/
var Person = Class({
Create : function(name,age) {
//调用上层构造函数
this.base();
this.name = name;
this.age = age;
},
SayHello : function() {
alert("Hello I‘m " + this.name + "," + this.age + "years old!");
},
toString : function() {
//覆写tostring方法
return this.name;
}
});

var Employee = Class(Person,{
Create : function(name,age,salary) {
//调用基类的构造函数
this.base(name,age);
this.salary = salary;
},
ShowMeTheMoney : function() {
alert(this.toString() + "$" + this.salary);
}

});

var xijinping = new Person("xijinping",63);
var likeqiang = new Employee("likeqiang",55,3500);

时间: 2024-10-15 05:37:09

201506021403_《JavaScript完美甘露模型代码》的相关文章

定时器运行原理 && javascript事件循环模型

定时器是我们经常使用的一个异步函数,它的用处十分广泛,比如图片轮播.各种小的动画.延时操作等等:定时器函数只有两个setTimeout.setInterval,这两个工作原理相同,唯一的区别是:setTimeout只执行一次,setInterval循环执行:通过以下实例看看对定时器原理掌握程度: 定时器3个实例 首先声明这三个实例输出皆不同,先思考输出结果,以及为何不同 实例一: console.log('test1') for(var i=0;i<10;i++){ setTimeout(()=

JavaScript的内存模型

引言 在我们的前端日常工作中,无时无刻不在进行着变量的声明和赋值,你是否也曾碰到过变量声明报错或变量被污染的问题,如果你跟笔者一样碰到过,那么我们应该暂时停下来好好思考问题发生的原因以及如何采取相应的补救措施.当然排查问题最好的方式就是深入其底层细节,了解在JavaScript中的内存分配方式.只有我们对底层细节有一定的了解之后,才能轻而易举地化解在写代码过程中遇到的各种问题.本文基于JavaScript的内存模型继续衍生出let和const的差异性对比,若文中有错误的地方,还请指出. 1.内存

如何实现 javascript “同步”调用 app 代码

在 App 混合开发中,app 层向 js 层提供接口有两种方式,一种是同步接口,一种一异步接口(不清楚什么是同步的请看这里的讨论).为了保证 web 流畅,大部分时候,我们应该使用异步接口,但是某些情况下,我们可能更需要同步接口.同步接口的好处在于,首先 js 可以通过返回值得到执行结果:其次,在混合式开发中,app 层导出的某些 api 按照语义就应该是同步的,否则会很奇怪——一个可能在 for 循环中使用的,执行非常快的接口,比如读写某个配置项,设计成异步会很奇怪. 那么如何向 js 层导

Windows Socket五种I/O模型——代码全攻略(转)

Winsock 的I/O操作: 1. 两种I/O模式 阻塞模式:执行I/O操作完成前会一直进行等待,不会将控制权交给程序.套接字 默认为阻塞模式.可以通过多线程技术进行处理. 非阻塞模式:执行I/O操作时,Winsock函数会返回并交出控制权.这种模式使用 起来比较复杂,因为函数在没有运行完成就进行返回,会不断地返回 WSAEWOULDBLOCK错误.但功能强大.为了解决这个问题,提出了进行I/O操作的一些I/O模型,下面介绍最常见的三种: Windows Socket五种I/O模型——代码全攻

多路复用I/O模型poll() 模型 代码实现

多路复用I/O模型poll() 模型 代码实现 poll()机制和select()机制是相似的,都是对多个描述符进行轮询的方式. 不同的是poll()没有描述符数目的限制. 是通过struct pollfd结构体,对每个描述符进行轮询的 struct pollfd fdarray { int fd;    /*文件描述符*/ short events; /*表示等待的事件*/ short revents;/*表示返回事件即实际发生的事件*/ }; data.h #ifndef DATA_H #d

ecmall中static变量的使用-model模型代码设计

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 function &m($model_name, $params = array(), $is_new = false) {     <span style="backg

JavaScript在线运行html代码,保存html代码到本地

在网页中看到一些html代码却不知这样的代码运行起来是什么样子?觉得一些模板代码不错还要手动复制,新建文件,粘贴嫌麻烦?下面的js方法可以帮你解决这些问题. <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>JavaScript在线运行html代码,保存html代码到本地</title> </head> <body> &l

javascript实现的分页代码实例

javascript实现的分页代码实例: 下面是一段javascript实现的分页代码,当然必须要结合后台代码实现.大家可以自行分析一下代码,希望能够给大家带来一定的帮助,代码如下: <script type="text/javascript"> function setPage(opt) { if(!opt.pageDivId || opt.allPageNum < opt.curpageNum || opt.allPageNum < opt.showPage

Javascript加入收藏夹代码

Javascript加入收藏夹代码, 这个js代码支持firefox浏览器很是难得, 支持Firefox的加入收藏夹JS代码.www.mlyrx120.com 具体信息你可以这么写: 点击即可把你的网站添加到浏览器的收藏菜单下 加入收藏夹 将xxx网站加入收藏夹 收藏本网站 留下网站 怎么写才能让别人加入收藏夹,就要看你的本事了 把ijavascript.cn加入收藏 下面这个也是Javascript加入收藏夹代码,同样支持firefox 页面使用:rl.82676666.com 添加到收藏