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(){.. ...
随机推荐
- Windos无法验证文件数组签名
参考链接:https://jingyan.baidu.com/article/09ea3ede6982c4c0aede39e6.html Windows无法验证文件数字签名而无法启动,照以下去做,可以 ...
- webgl 的空间变换(下):空间变换
在网上看了很多关于在三维世界中怎么把一个顶点经过一步步变化,最终呈现在我们的屏幕上的. 其实很多博客或者书籍已经讲的很清楚了,那为什么我还要特别再写一次博客来阐述自己观点呢?(这里只针对那些学习web ...
- 如何修改MFC的图标
原文:如何修改MFC的图标 修改左上角的图标和任务栏里图标 在对话框构造函数中 CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/) : CDialog(CTestD ...
- vue开发 - 根据vue-router的meta动态设置html里标签的内容
路由文件 :router/index.js import Vue from 'vue'import Router from 'vue-router'import index '@/view/index ...
- librdkafka使用VS2015进行编译
抄了那么久的<kafka权威指南>,开始实操了,按照书本的介绍,kafka本身提供针对Java的原生API,其它语言如果需要使用kafka,那么就需要通过第三方库来做了,对了再书中一直提及 ...
- 去掉idea中的警告
目前我使用的两种方法 1.idea右下角有个小人,单击后选择Syntax即可 2.在setting→Editor→Inspections搜索SQL,把No data sources configure ...
- 19Spring返回通知&异常通知&环绕通知
在前置通知和后置通知的基础上加上返回通知&异常通知&环绕通知 代码: package com.cn.spring.aop.impl; //加减乘除的接口类 public interfa ...
- 第十九节:Scrapy爬虫框架之Middleware文件详解
# -*- coding: utf-8 -*- # 在这里定义蜘蛛中间件的模型# Define here the models for your spider middleware## See doc ...
- C语言学习7
结构体数组:实现简易通讯录 #include <stdio.h> #include <stdlib.h> #define NUM 3 struct person { ]; ]; ...
- POJ3641 (快速幂) 判断a^p = a (mod p)是否成立
Description Fermat's theorem states that for any prime number p and for any integer a > 1, ap = a ...