日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > web前端 > jscript > Hook Javascript Function

Hook Javascript Function

來源:程序員人生   發布時間:2013-11-04 13:31:48 閱讀次數:3033次
在公文升級方案中, 因為使用了新模板, 我需要在原來系統執行某幾個函數之前, 做一些檢查,如果成立則執行原有函數,否則執行我的新邏輯,然后再依情況決定是不是執行原函數。

我們知道,Javascript中函數有靜態函數、成員函數和實例化對象的成員函數之分,這些函數的實現存在正常函數和匿名函數的區分。所以在我們Hook成員時,我們要對這些情況兼而顧之。

例如對與下列函數Hook調用,預想產生如下的輸出:

//全局函數無參數

function Method1(){

alert('Method1');

}

 

Method1.hook(function()

{

alert('befor Method1');

return true;

},

function()

{

alert('after Method1');

}

);

 

Method1();

/* 輸出

befor Method1

Method1

after Method1

*/

alert('-----------------');

//全局函數有參數

function Method2(name){

alert('Method2 with ' + name);

}

Method2.hook(function(name)

{

alert('befor Method2 with ' + name);

return true;

},

function()

{

alert('after Method2 ');

}

);

Method2('evlon');

/* 輸出

befor Method2 with evlon

Method2 with evlon

after Method2

*/

 

alert('-----------------');

 

//Hook字符串的toString 函數

String.prototype.toString.hook(String.prototype, function()

{

alert('befor string.toString');

return true;

});

 

var s = "return s";

alert(s.toString());

/* 輸出

befor string.toString

return s

*/

alert('-----------------');

 

 

//Hook 系統已有全局函數parseInt

parseInt.hook(function()

{

alert('befor parseInt');

return true;

});

 

alert(parseInt('5'));

/* 輸出

befor parseInt

5

*/

alert('-----------------');

 

//Hook 所有數組對象的join 方法

Array.prototype.join.hook(Array.prototype, function(span)

{

alert('befor Array.prototype.join separator ' + span);

return true;

});

 

alert([3,5,6].join(','));

/* 輸出

befor Array.prototype.join separator ,

3,5,6

*/

alert('-----------------');

 

var list = [3, 5, 6];

//Hook list 這個實例數組對象的join 方法

list.join.hook(list, function(span)

{

alert('befor list.join separator ' + span);

return true;

});

 

alert(list.join(','));

/* 輸出

befor list.join separator ,

befor Array.prototype.join separator ,

3,5,6

*/

alert('-----------------');

 

 

var list2 = [3, 5, 6, 7];

// 此處調用不會產生befor list.join separator ,

alert(list2.join(','));

 

/* 輸出

befor Array.prototype.join separator ,

3,5,6,7

*/

alert('-----------------');

//自定義類

function People() {

//成員函數帶參數

this.getName = function(name) {

alert('in getName with ' + name);

return 'return evlon';

}

 

}

 

var p = new People();

var p2 = new People();

 

//這里我們只Hook實例p2 的函數調用

p2.getName.hook(p2, 'getName2',

function(name) {

alert('befor getName2 with ' + name);

return true;

},

function() {

alert('after getName2');

}

);

p2.getName.hook(p2,

function(name) {

alert('befor getName with ' + name);

return true;

},

function() {

alert('after getName');

}

);

 

//因為只Hook了P2, 對這個調用無影響

alert(p.getName('argName'));

/* 輸出

in getName with argName

return evlon

*/

alert('-----------------');

 

alert(p2.getName('argName'));

/* 輸出

befor getName with argName

in getName with argName

after getName

return evlon

*/

 

alert('-----------------');

alert(p2.getName2('argName2'));

/* 輸出

befor getName2 with argName2

in getName with argName2

after getName2

return evlon

*/

 

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产成人在线看 | 国产亚洲欧洲 | 一区三区视频 | 国产女主播在线视频 | 国产精品久久久久久久免费大片 | 成人性生交大片免费看在线播放 | 精品一区精品二区 | 91精品国产综合久久福利不卡 | www国产亚洲精品 | 精品国产乱码久久久久久图片 | 日韩一区精品 | 91久久精品国产91久久 | 51久久夜色精品国产麻豆 | 国产精品久久久久久久av大片 | 黑人性视频 | 国产中文字幕在线观看 | 久久aⅴ乱码一区二区三区 蜜桃永久免费 | 色又黄又爽18件免费网站 | 欧美亚洲在线 | 欧美一区二区三区在线视频 | 国产精品区二区三区日本 | 精品一区二区三区免费 | 国产一区免费视频 | 国产成人精品一区二区在线 | 激情福利视频 | 天天综合网91 | 亚洲综合伊人 | av黄色在线 | 欧美aaaaaaaaa | 伊人av在线 | 精品久久久网站 | 日本欧美在线 | 日韩91| jlzzzjlzzz国产免费观看 | 欧美特级| 久久国产精品免费 | 99视频在线免费观看 | 亚洲精品视频观看 | 成人黄色电影视频 | 五月婷婷在线播放 | 国产三级午夜理伦三级 |