当前位置:首页 > 网站制作 > JavaScript教程 > Hook Javascript Function

hookfunction Hook Javascript Function

2017-01-11 | 来源:网络 | 关键字: hookfunction javascripthook
在公文升级方案中, 因为使用了新模板, 我需要在原来系统执行某几个函数之前, 做一些检查,如果成立则执行原有函数,否则执行我的新逻辑,然后再依情况决定是不是执行原函数。我们知道,Javascript中
在公文升级方案中, 因为使用了新模板, 我需要在原来系统执行某几个函数之前, 做一些检查,如果成立则执行原有函数,否则执行我的新逻辑,然后再依情况决定是不是执行原函数。

我们知道,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('-----------------');

/www.alonely.com.cn/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

*/

评论

评论数10

表情
发表评论
网友评论仅供其表达个人看法,并不表明网易立场。
《Hook Javascript Function》更多评论

头条推荐

阅读下一篇

七款实用的Javascript代码高亮脚本

代码高亮很有用,特别是在需要在网站或者blog中显示自己编写的代码的时候,或者给其他人查看或调试语法错误的时候。我们可以在显示中支持代码高亮,以便于阅读者可以十分方便的读取代码块、增加用户阅读代码的良 ... 查看全文

返回JavaScript教程 返回网站首页