js的调用函数前先执行某语句问题

js的调用函数前先执行某语句问题

标签: web前端面试
 分类:

前几天去笔试,做了一道题,给Function添加一个新的方法c,在调用c的时候,先执行c的回调,再执行原函数的语句。要求写出c函数。(大概这个意思吧。。。看不懂,看代码吧) 
例:

function a(){alert("after");}
a.c(function(){alert("before");});
///////
before  //执行a.c之后出来的结果
after
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

当时做不出来,之后问了一下别人,他告诉我说,他见得比较多的是在调用某个已有函数前先执行某些语句的那种题,大概是这样的。

//调用$.ajax函数,要求先执行ajaxBefore()
var _ajax=$.ajax;
$.ajax=function(){ajaxBefore();_ajax.call(this,arguments);}
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

原理就是先把原函数保存下来,然后修改函数,先调用先执行的语句,再调用回原函数

那其实面试题的要求也是差不多的,只是它是调用另外一个函数去实现而已。 
对于要实现c函数,执行before部分比较简单,用回调函数就好,但对于如何获得a函数的内容,当时就想不出来的 
最近看书看到了对象的构造器属性时,才有一点头绪。 
当我们创建对象时(a),实际上同时赋予了该对象构造器属性,而该属性实际上指向用于创建该对象的构造器函数的引用。

ok,那之前的问题就搞掂啦,

Function.prototype.c=function(callback){
    callback();
    this.call(this.constructor);
}
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

就这样。。。。。

posted @ 2017-08-21 17:09  吃饭了吗  阅读(634)  评论(0编辑  收藏  举报