js函數對象的總結

修改用字面量創建的對象的原型的方法;
var a = Object.create({a:1});
a.a //1

var p = Object.getPrototypeOf(a);
p.a = 2; //2
a.a //2

var man = {
      name:"bosn",
      weibo:"@bosn",
      $age:null,
      get age(){
        return new Date().getFullYear()-1988;
      },
      set age(val){
        this.$age = +val;
      }
  }

get set 中的函數體中的屬性不能與函數名相同

setTimeout在使用的時候注意:在同一個函數裏clearTimeout要在setTimeout之後執行纔有效,因爲clearTimeout在之前的話,雖然清除了循環,但之後又執行後面的setTimeout,又會進入另一個循環.

var a = {b:function(){return 5}} a.b() //5
var f = {get c(){return 8}} f.c //8

模擬Map()

function Map(){
    var args = arguments;
    var arr = [];
    if(args.length){
        for(var i=0;i<args[0].length;i++){
        arr[i] = args[0][i];
        }
    }
    this.get=function(x){
    for(i=0;i<arr.length;i++){
        if(arr[i]&&arr[i][0] === x){
            return arr[i][1];
        }
    }
    }
    this.set=function(x,y){
        var val = [x,y];
        for(i=0;i<arr.length;i++){
            if(arr[i]){
                if(arr[i][0] === x){
                    arr[i][1] = y;
                }else {
                    arr.push(val);
                }
            }
        }
        var setVal = [x,y];
        arr.push(setVal);
    }
    this.has = function(x){
        var flag = false;
        for(i=0;i<arr.length;i++){
            if(arr[i]&&arr[i][0] === x){
                flag = true;
                break;
            }
        }
        return flag;
    }
    this.delete = function(x){
        var flag = false;
        var num;
        for(i=0;i<arr.length;i++){
            if(arr[i]&&arr[i][0] === x){
                flag = true;
                num = i
                break;
            }
        }
        if(flag){
            delete arr[num];
            return true;
        }else {
            return flag;
        }
    }
}

測素數:

function ss(x){
    var x = parseInt(x);
    if(x === 1){return false;}
    for(var i=2;i<x;i++){
       if(x%i===0){
        return false;
        }     
    }
    return true;
}

添加事件處理程序封裝對象

var eventUtil = {
      addHandler:function(element,type,handler){
          if(element.addEventListener){
              element.addEventListener(type,handler,false);
          }else if(element.attachEvent){
              element.attachEvent("on"+type,handler);
          }else {
              element["on"+type] = handler;
          }
      },
      removeHandler:function(element,type,handler){
          if(element.removeEventListener){
              element.removeEventListener(type,handler,false);
          }else if(element.dettachEvent){
              element.dettachEvent("on"+type,handler);
          }else {
              element["on"+type] = handler;
          }
      },
      getEvent:function(event){
          return event?event:window.event;
      },
      getType:function(event){
          return event.type;
      },
      getElement:function(event){
          return event.target||event.srcElement;
      },
      stopPropagation:function(event){
          if(event.stopPropagation){
              event.stopPropagation();
          }else{
              event.cancleBubble = true;
          }
      },
      preventDefault:function(event){
          if(event.preventDefault){
              event.preventDefault()
          }else{
              event.returnValue = false;
          }
      }
  }

getElementsByClassName替代:

function getEleByClass(className,parent){
      var oParent = parent?document.getElementById(parent):document;
      var elements = oParent.getElementsByTagName("*");
      var eles = [];
      for(var i=0,len=elements.length;i<len;i++){
          if(elements[i] === className){
              eles.push(elements[i]);
          }
      }
      return eles;
  }

冒泡排序

for(var i = 0;i<a.length-1;i++){
        for(var j = 0;j<a.length-1-i;j++){
            if(a[j]>a[j+1]){
                    a[j]+=a[j+1];
                a[j+1] = a[j]-a[j+1];
                a[j] -= a[j+1];
            }
        }
    }

等腰三角

for(var i = 0;i<5;i++){
      for(var j = 0,str = [];j<9;j++){
          str[str.length] = (j<4-i||j>=i+5)?" ":"*";
      }
      console.log(str.join(""));
  }

正三角

for(var i = 0;i<5;i++){
      for(var j = 0,str = [];j<i+1;j++){
          str.push("*");
      }
      console.log(str.join(""));
  }

另一邊三角

for(var i = 0;i<5;i++){
      for(var j = 0,str = [];j<5;j++){
          str[str.length] = (j<4-i)?" ":"*";
      }
      console.log(str.join(""));
  }

indexOf遍歷

index = -1
while(index= str.indexOf("",index+1)!=-1){}

index = str.length;
while(index = str.lastIndexOf("",index-1)!=-1){.....if(index<=0){break;}}

雙色球

    var reds = [];
    var blue;
    var r;
    var flag;
    while(reds.length<6){
        flag = true;
        r = Math.floor(Math.random()*34);
        for(var i=0;i<reds.length;i++){
            if(reds[i]==r){
                flag = false;
                break;
            }
        }
        if(flag){reds.push(r);}
    }
    blue = Math.floor(Math.random()*34);
    console.log("紅球 "+reds.join(" ")+" 藍球 "+blue);

遞歸

var tabs = [];
function getChildren(parent){
    var children = parent.childNodes;
    if(children){
        tabs.push("\t");
        for(var i=0, len=children.length;i<len;i++){
            console.log(tabs.join("")+"|-"+(parent.nodeType != 3?parent.nodeName:parent.nodeValue));
            if(children[i].childNodes.length){
                arguments.callee(children[i]);
            }
        }
        tabs.pop();
    }
}
getChildren(document);

遞歸

var iterator =
document.createTreeWalker(document,NodeFilter.SHOW_ALL,null,false);
var node = null;
var blank = [];
while(node = iterator.nextNode()){
    console.log(blank.join("")+"|-"+(node.nodeType!=3?node.nodeName:node.nodeValue));
    if(node.childNodes.length){
        blank.push("\t");
    }else{
        var next = iterator.nextNode();
        if(next){
        while((node = node.parentNode)!==next.parentNode){
            blank.pop();
        }
        }else{
            break;
        }
        iterator.previousNode();
    }
}

documentElement?documentElement!==”HTML”:false;
documentElement&&documentElement!==”HTML”?true:false;
先檢查documentElement是否存在,若存在再執行第一句

function isHTML(doc){
    return doc.createElement("p").nodeName === doc.createElement("P").nodeName
}

e.ownerDocument 獲得元素的document

function fixContains(a,b){
    try{
        while(b = b.parentNode){
            if(b === a){
                return true;
            }
        }
        return false;
    }catch(e){
        return false;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章