为内置对象添加原型方法


//为内置对象添加原型方法

var arr=new Array(10,20,30,40,50);
   arr.join("|");
   console.dir(arr);


   var str=new String("哦,唛嘎的");
   str.indexOf("哦");
   console.dir(str);


   var dt=new Date();
   dt.getFullYear();
   console.dir(dt);

//实例中的方法如果没有,去创建该实例对象的构造函数的原型对象中找



//我们能否为系统的对象的原型中添加方法,相当于在改变源码
//我希望字符串中有一个倒序字符串的方法
String.prototype.myReverse=function () {
  for(var i=this.length-1;i>=0;i--){
    console.log(this[i]);
  }
};
var str="abcdefg";
str.myReverse();


//为Array内置对象的原型对象中添加方法
Array.prototype.mySort=function () {
  for(var i=0;i<this.length-1;i++){
      for(var j=0;j<this.length-1-i;j++){
          if(this[j]<this[j+1]){
              var temp=this[j];
            this[j]=this[j+1];
            this[j+1]=temp;
          }//end if
      }// end for
  }//end for
};

var arr=[100,3,56,78,23,10];
arr.mySort();
console.log(arr);


String.prototype.sayHi=function () {
  console.log(this+"哈哈,我又变帅了");
};

//字符串就有了打招呼的方法
var str2="小杨";
str2.sayHi();

我理解的油猴的原理就是基于此(这个是冷月大佬写的钩子)

var cookie_cache = document.cookie;
Object.defineProperty(document, 'cookie', {
    get: function() {
        debugger;
        console.log('Getting cookie');
        return cookie_cache;
    },
    set: function(val) {
        console.log('Setting cookie', val);
        debugger;
        var cookie = val.split(";")[0];
        var ncookie = cookie.split("=");
        var flag = false;
        var cache = cookie_cache.split("; ");
        cache = cache.map(function(a){
            if (a.split("=")[0] === ncookie[0]){
                flag = true;
                return cookie;
            }
            return a;
        })
        cookie_cache = cache.join("; ");
        if (!flag){
            cookie_cache += cookie + "; ";
        }
        this._value = val;
        return cookie_cache;
    },
});