你可以在声明后更改 Javascript 函数吗? [英] Can you alter a Javascript function after declaring it?
问题描述
假设我有 var a = function() { return 1;}
.是否可以更改 a
以便 a()
返回 2
?也许通过编辑 a
对象的属性,因为 每个函数是一个对象?
Let's say I have var a = function() { return 1; }
. Is it possible to alter a
so that a()
returns 2
? Perhaps by editing a property of the a
object, since every function is an object?
更新:哇,谢谢大家的回复.但是,恐怕我不想简单地重新分配变量,而是实际编辑现有函数.我正在考虑如何组合 部分函数 在 Scala 中创建一个新的 PartialFunction
.我有兴趣在 Javascript 中编写类似的东西,并认为现有的函数也许可以更新,而不是创建一个全新的 Function
对象.
Update: Wow, thanks for all the responses. However, I'm afraid I wasn't looking to simply reassign a variable but actually edit an existing function. I am thinking along the lines of how you can combine partial functions in Scala to create a new PartialFunction
. I am interested in writing something similar in Javascript and was thinking that the existing function could perhaps be updated, rather than creating an entirely new Function
object.
推荐答案
你可以用 javascript 做各种有趣的事情,包括重新定义函数:
You can do all kinds of fun stuff with javascript, including redefining functions:
let a = function() { return 1; }
console.log(a()); // 1
// keep a reference
let old = a;
// redefine
a = function() {
// call the original function with any arguments specified, storing the result
const originalResult = old.apply(old, arguments);
// add one
return originalResult + 1;
};
console.log(a()); // 2
瞧.
更新以在更疯狂的场景中显示:
Updated to show this in a crazier scenario:
let test = new String("123");
console.log(test.toString()); // logs 123
console.log(test.substring(0)); // logs 123
String.prototype.substring = function(){ return "hahanope"; }
console.log(test.substring(0)); // logs hahanope
您可以在这里看到即使测试"首先定义,然后我们重新定义 substring(),更改仍然适用.
You can see here that even though "test" is defined first, and we redefine substring() afterwards, the change still applies.
旁注:如果你这样做,你真的应该重新考虑你的架构......当他/她正在查看一个应该的函数定义时,你会在 5 年后混淆一些可怜的开发人员的废话返回 1,但似乎总是返回 2....
Side note: you really should reconsider your architecture if you're doing this...you're going to confuse the crap out of some poor developer 5 years down the road when s/he's looking at a function definition that's supposed to return 1, but seems to always return 2....
这篇关于你可以在声明后更改 Javascript 函数吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!