gpt4 book ai didi

javascript - 替换 JavaScript 中的函数

转载 作者:行者123 更新时间:2023-11-28 20:38:17 26 4
gpt4 key购买 nike

可以用更好的形式重写吗?

function F() { return F.f(); } //wrapping :(
F.f = function() { /* code1 */ }
F.g = function() { /* code2 */ }

F.f = some_other_function
F.g() //this still works :D

我永远不会创建 F 的任何实例。我只是将它用作一种命名空间。
我尝试执行以下操作,但 F.g 没有被保留(我可以理解为什么,但我想要一个很好的解决方法,能够更改 F 的代码和行为,但不能更改像 F.g 这样的绑定(bind)):

function F() { /* code1 */ } //no wrapping :D, no need for F.f
F.g = function() { /* code2 */ }

F = some_other_function
F.g() //this points to nowhere now :(

编辑:我不想再使用 F.f 作为 code1 的包装器。

EDIT2:第一段代码是有效的 JS 并且具有我想要的行为。问题是我不喜欢我必须使用 F.f 。我想像在第二个代码中那样做,并且 F.g 仍然可以工作。
在运行时的某个时刻,我想更改 code1 并保持其他所有内容不变。

最佳答案

var F = {
f: function() {
/* code1 */
},
g: function() {
/* code2 */
}
};

F.f = function() { /* redefine F.f() */ }
// or
delete F.f;

F.g(); // still works

-

更新了问题澄清的答案

这是实现这一目标的一种方法,尽管整个想法有点不对劲。不确定为什么您需要这种模式。

function generate() {
var f = function() {
/* code1 */
};

var ret_val = function() {
f();
};

ret_val.g = function() {
/* code2 */
};

ret_val.setBehaviour = function(new_func) {
f = new_func;
};
}

F = generate();

F(); /* code1 */
F.g(); /* code2 */

F.setBehaviour(function() { /* redefine F() */ });
F.g(); /* code2 still works */

F(); /* new behaviour */

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

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