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];  
    }  
};


转载于:https://my.oschina.net/darkness/blog/357017

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值