Prototype的base和string类
来源:互联网 发布:iphone7移动数据几百kb 编辑:程序博客网 时间:2024/06/06 13:59
var Prototype = {
Version: '
ScriptFragment: '(?:<script.*?>)((/n|/r|.)*?)(?:<//script>)',
emptyFunction: function() {},
K: function(x) {return x}
}
/*------声明一个类-------------------*/
var Class = {
create: function() {
return function() {
this.initialize.apply(this, arguments);
}
}
}
/*------抽像类------------------*/
var Abstract = new Object();
/*------通过属性拷贝,实现继承和扩展------------------*/
Object.extend = function(destination, source) {
for (var property in source) {
destination[property] = source[property];
}
return destination;
}
/*------返回目标对像的说明------------------*/
Object.inspect = function(object) {
try {
if (object == undefined) return 'undefined';
if (object == null) return 'null';
return object.inspect ? object.inspect() : object.toString();
} catch (e) {
if (e instanceof RangeError) return '...';
throw e;
}
}
/*------返回一个方法实例,用于绑定方法------------------*/
Function.prototype.bind = function() {
var __method = this, args = $A(arguments), object = args.shift();
return function() {
return __method.apply(object, args.concat($A(arguments)));
}
}
/*------返回一个方法实例,用于绑定事件,将事件绑定到对像上------------------*/
Function.prototype.bindAsEventListener = function(object) {
var __method = this;
return function(event) {
return __method.call(object, event || window.event);
}
}
Object.extend(Number.prototype, {
toColorPart: function() {
var digits = this.toString(16);
if (this < 16) return '0' + digits;
return digits;
},
succ: function() {
return this + 1;
},
times: function(iterator) {
$R(0, this, true).each(iterator);
return this;
}
});
var Try = {
these: function() {
var returnValue;
for (var i = 0; i < arguments.length; i++) {
var lambda = arguments[i];
try {
returnValue = lambda();
break;
} catch (e) {}
}
return returnValue;
}
}
/*--------------------------周期性的调用某事件或方法类似于settimeout------------------------------------------------*/
var PeriodicalExecuter = Class.create();
PeriodicalExecuter.prototype = {
initialize: function(callback, frequency) {
this.callback = callback;
this.frequency = frequency;
this.currentlyExecuting = false;
this.registerCallback();
},
registerCallback: function() {
setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
},
onTimerEvent: function() {
if (!this.currentlyExecuting) {
try {
this.currentlyExecuting = true;
this.callback();
} finally {
this.currentlyExecuting = false;
}
}
}
}
/*--------------------------string对像扩展------------------------------------------------*/
Object.extend(String.prototype, {
gsub: function(pattern, replacement) {
var result = '', source = this, match;
replacement = arguments.callee.prepareReplacement(replacement);
while (source.length > 0) {
if (match = source.match(pattern)) {
result += source.slice(0, match.index);
result += (replacement(match) || '').toString();
source = source.slice(match.index + match[0].length);
} else {
result += source, source = '';
}
}
return result;
},
sub: function(pattern, replacement, count) {
replacement = this.gsub.prepareReplacement(replacement);
count = count === undefined ? 1 : count;
return this.gsub(pattern, function(match) {
if (--count < 0) return match[0];
return replacement(match);
});
},
scan: function(pattern, iterator) {
this.gsub(pattern, iterator);
return this;
},
truncate: function(length, truncation) {
length = length || 30;
truncation = truncation === undefined ? '...' : truncation;
return this.length > length ?
this.slice(0, length - truncation.length) + truncation : this;
},
strip: function() {
return this.replace(/^/s+/, '').replace(//s+$/, '');
},
stripTags: function() {
return this.replace(/<//?[^>]+>/gi, '');
},
stripScripts: function() {
return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
},
extractScripts: function() {
var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
return (this.match(matchAll) || []).map(function(scriptTag) {
return (scriptTag.match(matchOne) || ['', ''])[1];
});
},
/*--------------------------执行子串中的字符串-----------------------------------------------*/
evalScripts: function() {
return this.extractScripts().map(function(script) { return eval(script) });
},
/*--------------------------将html进行转义-----------------------------------------------*/
escapeHTML: function() {
var div = document.createElement('div');
var text = document.createTextNode(this);
div.appendChild(text);
return div.innerHTML;
},
/*--------------------------将html进行转义的相反操作-----------------------------------------------*/
unescapeHTML: function() {
var div = document.createElement('div');
div.innerHTML = this.stripTags();
return div.childNodes[0] ? div.childNodes[0].nodeValue : '';
},
/*--------------------------将字符串转换成联合数组-----------------------------------------------*/
toQueryParams: function() {
var pairs = this.match(/^/??(.*)$/)[1].split('&');
return pairs.inject({}, function(params, pairString) {
var pair = pairString.split('=');
params[pair[0]] = pair[1];
return params;
});
/*--------------------------将字符串转换成数组-----------------------------------------------*/
toArray: function() {
return this.split('');
},
/*--------------------------去除字符串中的短划线,并尊寻骆驼命名法则-----------------------------------------------*/
camelize: function() {
var oStringList = this.split('-');
if (oStringList.length == 1) return oStringList[0];
var camelizedString = this.indexOf('-') == 0
? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1)
: oStringList[0];
for (var i = 1, len = oStringList.length; i < len; i++) {
var s = oStringList[i];
camelizedString += s.charAt(0).toUpperCase() + s.substring(1);
}
return camelizedString;
},
/*--------------------------返回字符串的说明文字-----------------------------------------------*/
inspect: function() {
return "'" + this.replace(////g, '////').replace(/'/g, '///'') + "'";
}
});
/*--------------------------新增方法-----------------------------------------------*/
String.prototype.gsub.prepareReplacement = function(replacement) {
if (typeof replacement == 'function') return replacement;
var template = new Template(replacement);
return function(match) { return template.evaluate(match) };
}
- Prototype的base和string类
- string.prototype的使用详解
- string.prototype的使用详解
- String.prototype
- JS中string方法中常用方法之十二:String.prototype.toLowerCase()和String.prototype.toUpperCase()
- String.prototype实现的一些javascript函数
- String.prototype实现的一些javascript函数
- JavaScript---对象学习(一)object对象、string对象、javaScript的constructor属性和prototype属性
- this 和 base 的用法
- base 和this的区别
- ADS中RO Base和RW Base的作用
- ADS中RO Base和RW Base的作用
- 1000BASE-T和1000BASE-TX的区别
- 继承类和base,override,virtual 的…
- 基类Base和DialogFragment类封装的nice对话框
- singleton和prototype的区别
- JS的prototype和__proto__
- __proto__ 和 prototype的异同
- 计算机论文,基于asp.net的文件签发系统
- 用U盘成功绕过XP登陆密码
- 菜鸟技巧另类方法创建“加密”文件夹
- C#命名约定
- 浏览器的市场占有率
- Prototype的base和string类
- Java:泛型(generic)
- 什么是值类型 什么是引用类型
- 发送Email的方法(jmail方式实现)
- scriptus框架bulider基础工具类
- 什么叫实参 形参 怎么用 区别
- 有关Web的大文件上传和下载
- 分页代码
- OpenSolaris Howto (1)