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];
    }
};
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值