gpt4 book ai didi

javascript - 在 JavaScript 的函数中插入一行

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:50:04 25 4
gpt4 key购买 nike

在 JavaScript 中,是否可以在一个已经存在的函数中插入一行?我想创建一个函数,在函数的特定位置插入一行:

function insertLine(theFunction, lineToInsert, positionToInsert){
//insert a line into the function after the specified line number
}

例如,是否可以在此函数的第一行之前以编程方式插入 checkParameterTypes(min, "string", max, "string"); 行?

function getRandomInteger(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}

最佳答案

如果你想在一个函数的开头发生一些事情,你可以使用下面的。您确实有权访问 this 和您注入(inject)的函数的参数。因此它仍然适用于需要特定上下文的函数。

function inject(before, fn) {
return function(){
before.apply(this, arguments);
return fn.apply (this, arguments);
}
}

例如

function add(a, b) {
return a + b;
}

function concat(a, b) {
return a + b;
}

/**
* You can repeat index and type to check multiple arguments
*/
function createArgumentChecker(index, type /**index, type, ... */) {
var originalArgs = arguments;
return function() {
for (var i=0; i < originalArgs.length; i+=2) {
var index = originalArgs[i],
requestedType = originalArgs[i+1],
actualType = typeof arguments[index];
if (typeAtIndex != actualType) {
console.log("Invalid argument passed at index " + index +
". Expected type " + requestedType + "but it's " + actualType );
}
}
}
}

function logArguments() {
console.log(this, arguments);
}

// Inject an argument checker
add = inject(add, createArgumentChecker(0,"number", 1, "number"));
concat = inject (concat, createArgumentChecker(0, "string", 1, "string"));

// You can even do it multiple times, inject an argument logger;
add = inject(add, logArguments);
concat = inject(concat, logArguments);

JSfiddle

这在调试无法修改源代码的网站时会很方便,除非您可以将其剥离用于生产版本,否则我不会使用它进行参数检查。

关于javascript - 在 JavaScript 的函数中插入一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16205835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com