`

JS lang:扩展js语言本身

 
阅读更多

function $A(iterable) {
	  if (!iterable) return [];
	  if (iterable.toArray) return iterable.toArray();
	  var length = iterable.length || 0, results = new Array(length);
	  while (length--) results[length] = iterable[length];
	  return results;
}

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() {
  var __method = this, args = $A(arguments), object = args.shift();
  return function(event) {
    return __method.apply(object, [event || window.event].concat(args));
  };
};

Object.keys = function(object) {
    var keys = [];
    for (var property in object)
      keys.push(property);
    return keys;
};
Object.isArray = function(object) {
    return object && object.constructor === Array;
};
Array.prototype.concat = function() {
    var array = [];
    for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);
    for (var i = 0, length = arguments.length; i < length; i++) {
      if (Object.isArray(arguments[i])) {
        for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
          array.push(arguments[i][j]);
      } else {
        array.push(arguments[i]);
      }
    }
    return array;
};

Array.prototype.each=function(f){
    for(var i=0;i<this.length;i++) f(this[i],i,this);
};
Array.prototype.include = function(object) {

    var found = false;
    this.each(function(value) {
      if (value == object) {
        found = true;
      }
    });
    return found;
};

Array.prototype.clone = function(){
	var len = this.length;
	var r = [];
	for(var i=0;i<len;i++){
		if(typeof(this[i])=="undefined"||this[i]==null){
			r[i] = this[i];
			continue;
		}
		if(this[i].constructor==Array){
			r[i] = this[i].clone();
		}else{
			r[i] = this[i];
		}
	}
	return r;
};

Array.prototype.insert = function(index,data){
	if(isNaN(index) || index<0 || index>this.length) {
		this.push(data);
	}else{
		var temp = this.slice(index);
		this[index]=data;
		for (var i=0; i<temp.length; i++){
			this[index+1+i]=temp[i];
		}
	}
	return this;
};

Array.prototype.remove = function(s,dust){// 如果dust为ture,则返回被删除的元素
	var dustArr = null;
	for(var i=0;i<this.length;i++){
		if(s == this[i]){
			dustArr=this.splice(i, 1)[0];
		}
	}
	if(dust){
	    return dustArr;
	}else{
		dustArr=null;
		return this;
	}
};
Array.prototype.without = function(data){// 如果dust为ture,则返回被删除的元素
	var result = [];
	for(var i=0;i<this.length;i++){
		if(data == this[i]){
			continue;
		}
		result.push(this[i]);
	}
	return result;
};

Array.prototype.indexOf = function(func){
	var len = this.length;
	for(var i=0;i<len;i++){
		if (this[i]==arguments[0])
			return i;
	}
	return -1;
};
Array.prototype.invoke = function(name) {
	
	var args = $A(arguments);
	args.shift();
	
	for(var i=0; i<this.length; i++) {
		this[i][name].apply(this[i], args);
	}
};

Array.prototype.find = function(fun) {
	
	for(var i=0; i<this.length; i++) {
		if(fun(this[i])) {
			return this[i];
		}
	}
};

Array.prototype.intersect = function(arr) {
	
	var result = [];
	
	for(var i=0; i<this.length; i++) {
		if(arr.indexOf(this[i]) != -1) {
			result.push(this[i]);
		}
	}
	
	return result;
};

function $Element(ele) {
	if(typeof ele == "string") {
		ele = document.getElementById(ele);
	}
	
	$addMethod(ele);
	
	return ele;
}

$E = $Element;

function $addMethod(ele) {
	if(ele.__extended) {
		return;
	} else {
		ele.__extended = true;
	}
	for(var p in _ObserveAble) {
		ele[p] = _ObserveAble[p];
	}
	for(var p in _DomOperate) {
		ele[p] = _DomOperate[p];
	}
}

_DomOperate = {
	/**
	 * @method getCenter  get the element's center position
	 * @param {Element} dom
	 */
    getCenter: function(){
        //dom = $E(this);
        var pos = {left: this.offsetLeft, top: this.offsetTop};//dom.offset();
        var width = this.clientWidth;
        var height = this.clientHeight;
        
        return {x: pos.left + width / 2, y:pos.top + height / 2};
    }
};

_ObserveAble = {
	observes:{},
    fire: function(name, memo){
    	for(var p in this.observes) {
    		if(p == name) {
    			var event = {
    				meno: memo
    			};
    			observes[p](event);
    			break;
    		}
    	}
    	this.observes.invoke(name, memo);
    },
    observe: function(name, fun){
        if(!this.observes[name]) {
        	this.observes[name] = fun;
        }
    },
    stopObserving: function(name){
    	delete this.observes[name];
    }
};
 
分享到:
评论

相关推荐

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

    `lang.js`是一个针对JavaScript的面向对象扩展库,专门为了弥补原生JavaScript在面向对象编程上的不足而设计。 `lang.js`库引入了类的概念,使得JavaScript可以更像传统的面向对象语言那样进行开发。在JavaScript中...

    abstract-lang:用于解析任何语言的库

    这个库可能使用了TypeScript作为其主要开发语言,这得益于TypeScript的强大类型系统和对JavaScript的扩展,使得构建复杂、可维护的库成为可能。 “abstract-lang”这个名字暗示了它的核心功能——提供一种抽象的...

    jsTree lang plugin

    **jsTree语言插件详解** jsTree是一款流行的JavaScript库,用于在网页中创建交互式的树状视图。它提供了一种优雅的方式,使用户能够以结构化的形式展示和操作数据。其中,`language-plugin`是jsTree的一个重要组成...

    JsJava2.0最新Javascript类库下载

    4. **语言扩展**:`jsjava-lang-2.0.js`扩展了JavaScript的基础语言特性,可能包括异常处理、类型检查、元编程等,提升了语言的表达力和安全性。 5. **验证功能**:`jsjava-validator-2.0.js`提供了数据验证功能,...

    csss-lang:基于CSS的脚本语言解释器

    总结来说,CSSS-lang项目为Web开发提供了一种新颖的视角,将CSS这一原本用于样式控制的语言扩展到了编程领域,为开发者打开了新的创意空间。尽管目前可能还处在早期阶段,但其潜力不容忽视,值得我们去探索和应用。

    Laravel开发-laravel-javascript-lang

    总结来说,"Laravel开发-laravel-javascript-lang"是一个实用的工具,它帮助开发者将Laravel的强大功能扩展到前端,实现了翻译和路由的前后端共享,从而提升了现代Web应用的开发效率和用户体验。

    ace.js 好用的web代码编辑器,支持多种语言js,python,java, php等

    - "ace":指代Ace.js编辑器本身,它是这个压缩包的核心内容。 - "web":表示这是一个用于Web环境的工具,可以在浏览器中直接使用。 - "bianjiqi":即“编辑器”,明确了Ace.js的功能。 综上所述,Ace.js是一个...

    commons-lang3-3.0.js

    总结,`commons-lang3-3.0.js` 是Apache Commons Lang项目在JavaScript环境中的扩展,它为JavaScript开发者提供了与Java相似的工具类,简化了代码编写,提高了开发效率,尤其在处理字符串、数组、枚举、日期时间等...

    up-lang:用于分布式应用程序的实验性dsl

    up-lang,作为一个实验性的领域特定语言(DSL),是针对分布式应用程序设计的一种创新尝试。本文将深入探讨up-lang的核心概念、设计原则以及其与TypeScript的关联。 首先,了解DSL的概念至关重要。DSL是一种为特定...

    laravel-vue-lang:Laravel和Vue的本地化

    它基于安装$ yarn add laravel-vue-lang随着Laravel Mix扩展该软件包附带Laravel Mix扩展。 您可以包含它并在Mix上调用.lang() 。 如果由于某种原因您的本地化文件不在resources/lang ,则可以将其路径作为参数传递...

    js多语言(国际化)i8n的实现思路及方法

    JavaScript中的多语言支持,也称为国际化(i18n,取“internationalization”首字母缩写,18代表单词中的字母数),对于构建全球化网站或应用至关重要。它允许你的产品根据用户所在地区显示相应的语言内容。本文将...

    simplecalendar.js记录事件的日历插件

    "simplecalendar.js"是一款轻量级、易用且功能丰富的JavaScript日历插件,专为开发者设计,用于快速集成到各种Web应用中,实现事件记录与展示的功能。本文将深入探讨其核心特点、使用方法以及如何自定义和扩展。 一...

    js-object-clone:深度克隆并与ES5属性描述符和对象可扩展性支持进行比较

    对象克隆ES5的深克隆和比较概要// just for conveniencevar log = function ( ) { console . log . apply ( console , [ ] . slice . call ( arguments ) ) } ; var src = { name : '... push ( 'javascript' ) ;log

    lang-map:使用来自GitHub语言学家和language-map的数据获取与文件扩展名相关的语言或与某种语言相关的扩展名

    使用GitHub 的数据获取与文件扩展名相关的语言或与某种语言相关的扩展名 小心! API在0.4.0中的更改 API在v0.4.0中进行了更改。 请参阅以下文档,以获取有关新API的详细信息。 如有任何疑问,请随时提出问题。 安装...

    ZhEnQuoteSanitizer:拆分多语言字符串

    实现非常粗快猛,如果之后有空,也许可以写得好看一点,并扩展到或语言上。 例子 const sanitizer = require ( "./sanitizer" ) ; sanitizer ( "他站在那,感叹了句“What a beautiful scene!”。" ) // [ // { lang...

    video.js-7.18.1 代码及demo,附官网及github地址

    3. **lang** 文件夹:包含了video.js的多语言支持,允许开发者为不同地区的用户提供本地化体验。 4. **alt** 文件夹:可能包含备用图片资源,如播放/暂停按钮的替代图像。 5. **font** 文件夹:存放自定义图标字体...

    Lang.js:受Laravel Translator类启发的翻译助手

    Lang.js 提供了一种优雅的解决方案,通过模拟 Laravel 的翻译功能,让开发者能够快速集成和管理多语言资源。 ### 主要特点: 1. **简洁的API**:Lang.js 提供了与Laravel类似的API,如`trans('messages.welcome')`...

    summernote完整资源包(font、lang、plugin、css、js)

    这个压缩包包含了Summernote编辑器运行所需的所有核心资源,包括字体、语言包、插件、样式表以及JavaScript文件。 1. **字体资源**(font): Summernote可能包含了多种字体资源,这些字体通常用于提供丰富的文本...

    Javascript面向对象扩展库代码分享

    lang.js库提供了包和类的定义、类的继承与混合(mixin)、函数重载等功能,基本可满足大多数面向对象设计的需求。同时支持基于链式的定义方式,让库在使用时更加规范和便捷。下面首先通过简单的例子演示了lang.js的...

    JavaScript程序设计课件:第一章 JavaScript简介.ppt

    Script 代码可以放置在 HTML 文档的 `&lt;head&gt;` 或 `&lt;body&gt;` 标签内,但推荐将 ...随着技术的发展,JavaScript 也逐渐扩展到服务器端(Node.js)和移动应用开发(React Native、Ionic 等),成为全栈开发的重要工具。

Global site tag (gtag.js) - Google Analytics