标签: web前端面试
2015-09-29 17:48 1455人阅读 评论(0) 收藏 举报
 分类:
js(5) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

前几天去笔试,做了一道题,给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

就这样。。。。。

js的调用函数前先执行某语句问题的更多相关文章

  1. js 立即调用函数 IIFE(Immediately Invoked Function Expression) 【转】

    原文链接:https://www.cnblogs.com/ming-os9/p/8891300.html JS中 (function(){...})()立即执行函数   1 (function(){. ...

  2. JS进阶之---函数,立即执行函数

    一.函数 函数声明.函数表达式.匿名函数 函数声明:使用function关键字声明一个函数,再指定一个函数名,叫函数声明.function name () { … } 函数表达式:使用function ...

  3. js文件中函数前加分号和感叹号是什么意思?

    本文转自:http://blog.csdn.net/h_o_w_e/article/details/51388500 !function(){}();   !有什么用? 从语法上来开,JavaScri ...

  4. js 立即调用函数

    function makeCounter() { //不能立即执行 // 只能在makeCounter内部访问i var i = 0; return function () { console.log ...

  5. js里调用函数时,函数名带括号与不带括号的区别

    function test(){ return 1;}var a=test;console.log(a);//输出[Function: test]var b=test();console.log(b) ...

  6. jquery跨js文件调用函数示例

    var common_func; (function() { common_func = { load_hot_data: function(AreaCode) { var hot_html = &q ...

  7. js高级之函数高级部分

    基于尚硅谷的尚硅谷JavaScript高级教程提供笔记撰写,加入一些个人理解 github源码 博客下载 原型与原型链 prototype : 显式原型属性,它默认指向一个Object空对象(即称为: ...

  8. 深入理解,函数声明、函数表达式、匿名函数、立即执行函数、window.onload的区别.

    一.函数声明.函数表达式.匿名函数1.函数声明:function fnName () {…};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 2.函数表达式 var fnNam ...

  9. 立即调用函数(IIFE)

    定义: IIFE:立即调用的函数表达式,声明函数的同时立即调用这个函数. 语法: IIFE的常用写法:这两种写法的作用相同,只是表现形式不同而已,()只是起了自执行的作用 (function(){.. ...

随机推荐

  1. Less用法注意事项

    (1)引入顺序 引入你的 .less 样式文件的时候要设置 rel 属性值为 “stylesheet/less”: <link rel="stylesheet/less" t ...

  2. IO之DataStream数据流举例

    import java.io.*; public class TestDataStream { public static void main(String[] args) { ByteArrayOu ...

  3. 并不简单的Integer

    Integer是一个看着挺简单的,其实还是有点不一样,Integer是一个int的包装类,它是可以起到缓存作用的,在java基础里说过它的范围是(-128-127)在这个返回是有缓存的,不会创建新的I ...

  4. [Python3网络爬虫开发实战] 7.3-Splash负载均衡配置

    用Splash做页面抓取时,如果爬取的量非常大,任务非常多,用一个Splash服务来处理的话,未免压力太大了,此时可以考虑搭建一个负载均衡器来把压力分散到各个服务器上.这相当于多台机器多个服务共同参与 ...

  5. HTML5地理定位-Geolocation API

    HTML5提供了一组Geolocation API,来自navigator定位对象的子对象,获取用户的地理位置信息Geolocation API使用方法:1.判断是否支持 navigator.geol ...

  6. time | sys | os 模块,递归删除文件,项目分析

    一,复习 ''' 1.跨文件夹导包 - 不用考虑包的情况下直接导入文件夹(包)下的具体模块 2.__name__: py自执行 '__main__' | py被导入执行 '模块名' 3.包:一系列模块 ...

  7. 建仓类型与对应建仓价MT4

    建仓类型与对应建仓价 (Bid,Ask) 建仓类型 对应建仓价 Buy Ask+Spread Sell Bid-Spread BuyLimit Ask-Spread-StopLevel SellLim ...

  8. Oracle 实现查询不区分大小写(SQL实现)

    转为小写  LOWER('ABC') 结果 abc转为大写  UPPER('aBc') 结果 ABC 将数据库字段数据和前台接受的值全部转换为大写或者小写 例: select * from table ...

  9. 牛客练习赛29 B 列队

    [题解] 把某一行或某一列有4个1的都统计出来,然后首尾接上尽量长的,注意首尾不能选上同一个矩阵,要维护前缀.后缀1最大值和次大值. 还要注意维护矩阵内连续1的长度,因为可能有 0 0 0 0 这种情 ...

  10. nyoj 2 括号配对问题(stack)

    括号配对问题 时间限制:3000 ms  |            内存限制:65535 KB 难度:3   描述 现在,有一行括号序列,请你检查这行括号是否配对.   输入 第一行输入一个数N(0& ...