【JavaScript】JavaScript模拟Class
beauty("$Class",["$underscore"],function(_){
var Class = function () {
var length = arguments.length;
var option = arguments[length - 1];
option.init = option.init || function () {
};
// 如果参数中有要继承的父类
if (length === 2) {
/**
* @ignore
*/
var superClass = arguments[0].extend;
/**
* @ignore
*/
var tempClass = function () {
};
tempClass.prototype = superClass.prototype;
/**
* @ignore
*/
var subClass = function () {
this.init.apply(this, arguments);
};
// 加一个对父类原型引用的静态属性
subClass.superClass = superClass.prototype;
//subClass.superClass = superClass;
/**
* @ignore
*/
subClass.callSuper = function (context, func) {
var slice = Array.prototype.slice;
var a = slice.call(arguments, 2);
var func = subClass.superClass[func];
//var func = subClass.superClass.prototype[func];
if (func) {
func.apply(context, a.concat(slice.call(arguments)));
}
};
// 指定原型
subClass.prototype = new tempClass();
// 重新指定构造函数
subClass.prototype.constructor = subClass;
_.extend(subClass.prototype, option);
/**
* @ignore
*/
subClass.prototype.init = function () {
// 调用父类的构造函数
// subClass.superClass.init.apply(this, arguments);
// 调用此类自身的构造函数
option.init.apply(this, arguments);
};
return subClass;
// 如果参数中没有父类,则单纯构建一个类
} else {
if (length === 1) {
/**
* @ignore
*/
var newClass = function () {
// 加了return,否则init返回的对象不生效
return this.init.apply(this, arguments);
};
newClass.prototype = option;
return newClass;
}
}
};
beauty.$superPackage("$Class",Class);
});
【JavaScript】JavaScript模拟Class的更多相关文章
- Javascript 接口模拟
Javascript接口模拟可以通过三种方式实现文档手段(注释).辅助类和鸭式辨. 第一种和第二种只形式上体现没有真正的实现. 鸭式辨实现原理是:"只要能像鸭子一样叫和走就是鸭子" ...
- JavaScript之模拟评星打分
<head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312&qu ...
- Javascript之模拟文字高亮
在我们平时浏览网页的时候,我们常常会用到Ctrl+F(搜索)功能,被搜索到的文字就是高亮显示.那么,如何在Javascript中模拟文字高亮显示这一功能呢? 以下为笔者写的样例代码: <!DOC ...
- [Javascript] 爬虫 模拟新浪微博登陆
概述: 由于业务需要,要编写爬虫代码去爬去新浪微博用户的信息. 虽然在网上能找到不少信息,但由于新浪微博改版,其登陆机制进行了修改,故很多老的文章就不适合用了. 经过一番摸索,成功模拟新浪微博的登陆 ...
- JavaScript动画-模拟拖拽
模拟拖拽的原理: x1等于div.offsetLeft y1等于div.offsetTop x2等于ev.clientX(ev表示event事件) y2等于ev.clientY 当我们在方块上按下鼠标 ...
- 浅谈Javascript事件模拟
事件是用来描述网页中某一特定有趣时刻的,众所周知事件通常是在由用户和浏览器进行交互时触发,其实不然,通过Javascript可以在任何时间触发特定的事件,并且这些事件与浏览器创建的事件是相同的.这就意 ...
- javascript之模拟块级作用域
在java.C++等语言中,变量i在会在for循环的语句块中定义,循环一旦结束,变量i就会被销毁.可是在javaScript中,从定义开始,就可以在函数内部随处访问.比如 function outpu ...
- JavaScript数组模拟栈和队列
*栈和队列:js中没有真正的栈和队列的类型 一切都是用数组对象模拟的 栈:只能从一端进出的数组,另一端封闭 FILO 何时使用:今后只要仅希望数组只能从一端进 ...
- JavaScript事件模拟元素拖动
一.前言: 最近要实现一个元素拖放效果,鼠标拖动元素并且定位元素,首先想到的是HTML5中的拖放,在HTML5中,有一个draggable属性,且有dragstart, dragover, drop等 ...
- JavaScript 事件——“模拟事件”的注意要点
DOM中的事件模拟 三个步骤: 首先通过document.createEvent()方法创建event对象,接收一个参数,即表示要创建的事件类型的字符串: UIEvents(DOM3中的UIEvent ...
随机推荐
- 三星Mega 6.3(i9200)删除kingroot
关于kingroot实际效果怎么样,是不是流氓软件,我不做评论. 手机型号,三星galaxy mega 6.3(i9200)水货,更详细的机型不知道怎么看. 刷了官方的rom以后,下载了kingroo ...
- 论文笔记之:RATM: RECURRENT ATTENTIVE TRACKING MODEL
RATM: RECURRENT ATTENTIVE TRACKING MODEL ICLR 2016 本文主要内容是 结合 RNN 和 attention model 用来做目标跟踪. 其中模型的组成 ...
- Java Warmup
http://www.brendangregg.com/blog/2016-09-28/java-warmup.html
- echarts简单使用
最近在做一个项目,开始使用的是acharts,在电脑端访问的效果还真不错,但是放到手机端访问就惨了,尤其是iOS系统上,各种不兼容,后来准备换收费的hightcharsts,无意间发现有个免费的ech ...
- OpenJudge计算概论-分配病房
/*===================================== 分配病房 总时间限制: 1000ms 内存限制: 65536kB 描述 某个科室的病房分为重症和普通,只有当病人的疾病严 ...
- 解决Android AVD的方向键DPAD不能用的问题
Android AVD在生成出来一个新的模拟器之后默认都是不能够使用DPAD的.原因是它禁用了. 解决方式如下 : 找到C:\Documents and Settings\Administrator\ ...
- selenium+python自动化之操作浏览器
一.打开网站 1.第一步:从selenium里面导入webdriver模块 2.打开Firefox浏览器(Ie和Chrome对应下面的) 3.打开百度网址 二.设置休眠 1.由于打开百度网址后,页面加 ...
- GitHub简单使用入门
自从google code关闭了下载服务了之后,GitHub作为了目前最好用的免费开源项目托管站点,众多开源项目都托管在github,其中不乏著名的播放器MPC-HC. 不习惯于英文的朋友,难免少不了 ...
- innodb数据库批量转换表引擎为MyISAM
2013.0106 innodb数据库批量转换表引擎为MyISAM 来源:本站原创 PHP, 数据库, 系统技术 超过488名童鞋围观 1条评论 <?php //连接数据库 $host='lo ...
- 错误:javax.servlet.jsp.PageContext can not be to a type
在写Jsp文件时,引入script源文件(<script type="text/javascript" src="${pageContext.request.con ...