gpt4 book ai didi

javascript - 仅在未调用特定函数时才调用构造函数行为

转载 作者:行者123 更新时间:2023-11-30 10:36:57 26 4
gpt4 key购买 nike

抱歉 - 我不知道该如何描述。示例:

function OutputNumber(number) {
this.outputThisInstead = function (otherNumber) {
console.log(otherNumber);
}
console.log(number);
}

期望的用法:


new OutputNumber(1);

控制台输出:1


new OutputNumber(1).outputThisInstead(2);

控制台输出:2


自然地,1 将始终写入控制台,而不管对象上还调用了什么。

我追求的是这种特殊的语法以及行为——将一个函数附加到初始化上。这感觉是不可能的,因为必须在调用任何函数之前构造对象,但这是否可以通过其他方式实现?

最佳答案

时间延迟(例如,在浏览器环境中,setTimeout 或类似的)和标志是可能的。不是理想的,但可能。

否则,不,您不能将构造函数的操作基于尚未发生的事情。您必须改为将某些内容传递给构造函数,让它知道发生了什么。

浏览器示例(同样,我不推荐这样做):

function OutputNumber(number) {
var handle = 0;
this.outputThisInstead = function (otherNumber) {
if (handle) {
clearTimeout(handle);
handle = 0;
}
console.log(otherNumber);
}
handle = setTimeout(function() {
console.log(number);
}, 0);
}

根据您对问题的评论:

This is the end of a sequence of chaining objects/functions, that I'm experimenting with. For example:

Assert.that(1).is.not(2).because('output this message if fails');

Here not(2) returns an object on which because can optionally be called. The behaviour of the object would depend on because being called.

与其让链中较早函数的行为依赖于链中较晚的函数,我可能会在某些内容的末尾添加 .end():

Assert.that(1).is.not(2).because('output this message if fails').end();

end 将输出之前函数存储的任何消息。不需要黑魔法。显然,这是因为人们可能无法打开 .end(),但是您需要某种类型的触发器来执行输出,如果您希望根据可选的后续函数调用更改输出。

关于javascript - 仅在未调用特定函数时才调用构造函数行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13435036/

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