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

版权声明:本文为博主原创文章,未经博主允许不得转载。
前几天去笔试,做了一道题,给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的调用函数前先执行某语句问题的更多相关文章
- js 立即调用函数 IIFE(Immediately Invoked Function Expression) 【转】
原文链接:https://www.cnblogs.com/ming-os9/p/8891300.html JS中 (function(){...})()立即执行函数 1 (function(){. ...
- JS进阶之---函数,立即执行函数
一.函数 函数声明.函数表达式.匿名函数 函数声明:使用function关键字声明一个函数,再指定一个函数名,叫函数声明.function name () { … } 函数表达式:使用function ...
- js文件中函数前加分号和感叹号是什么意思?
本文转自:http://blog.csdn.net/h_o_w_e/article/details/51388500 !function(){}(); !有什么用? 从语法上来开,JavaScri ...
- js 立即调用函数
function makeCounter() { //不能立即执行 // 只能在makeCounter内部访问i var i = 0; return function () { console.log ...
- js里调用函数时,函数名带括号与不带括号的区别
function test(){ return 1;}var a=test;console.log(a);//输出[Function: test]var b=test();console.log(b) ...
- jquery跨js文件调用函数示例
var common_func; (function() { common_func = { load_hot_data: function(AreaCode) { var hot_html = &q ...
- js高级之函数高级部分
基于尚硅谷的尚硅谷JavaScript高级教程提供笔记撰写,加入一些个人理解 github源码 博客下载 原型与原型链 prototype : 显式原型属性,它默认指向一个Object空对象(即称为: ...
- 深入理解,函数声明、函数表达式、匿名函数、立即执行函数、window.onload的区别.
一.函数声明.函数表达式.匿名函数1.函数声明:function fnName () {…};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 2.函数表达式 var fnNam ...
- 立即调用函数(IIFE)
定义: IIFE:立即调用的函数表达式,声明函数的同时立即调用这个函数. 语法: IIFE的常用写法:这两种写法的作用相同,只是表现形式不同而已,()只是起了自执行的作用 (function(){.. ...
随机推荐
- 07JavaScript数组与字符串对象
JavaScript数组与字符串对象 5.1.1数组(Array)对象 <script> //声明一个数组并赋值; var arr = new Array("aa",& ...
- 一键分享到QQ空间、QQ好友、新浪微博、微信代码
通过qq空间.qq聊天.新浪微博和微信二维码分享平台提供的接口,实现把网页中对应的图片.标题.描述的信息参数用javascript获取后传进接口中,实现一键分享. 使用到的接口(测试时需要登录,网址和 ...
- C++链表STL
#include <iostream> #include <list> #include <algorithm> #include <stdlib.h> ...
- python在linux下的使用
1.查看python(解释器)的版本(什么版本的解释器支持哪一版版的语言标准) 一般在linux上已经预装了python,只要在Bash Shell中输入python,即可看到如下版本信息: 按Ctr ...
- [Thu Summer Camp2016]补退选
题目描述不说了. 题解: Trie+vector…… Trie存学生,vector存答案. 极为无脑但无脑到让人怀疑 代码: #include<cmath> #include<vec ...
- [Python3网络爬虫开发实战] 1.4.2-MongoDB安装
MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档.数组及文档数组,非常灵活. MongoDB支持多 ...
- Kali Linux 下载、引导、安装
下载卡莉 Linux 官方镜像: https://www.kali.org/downloads/ 官方虚拟机镜像: https://www.offensive-security.com/kali-li ...
- linux命令 dig-域名查询工具
博主推荐:更多网络测试相关命令关注 网络测试 收藏linux命令大全 dig命令是常用的域名查询工具,可以用来测试域名系统工作是否正常. 语法 dig(选项)(参数) 选项 @<服务器地址&g ...
- Volume 1. Maths - Misc
113 - Power of Cryptography import java.math.BigInteger; import java.util.Scanner; public class Main ...
- 修改Python的镜像源
Mac OS下修改Python的镜像源 步骤: 切换到家目录 创建目录 .pip 并切换到该目录 创建 pip.conf 文件并写入配置信息 [global] index-url = https:// ...