gpt4 book ai didi

javascript - 将对象函数传递给对象构造函数

转载 作者:行者123 更新时间:2023-11-30 12:59:22 24 4
gpt4 key购买 nike

为标题道歉,但没有简洁的方式来表达它。我正在编写以下代码,旨在将一组计数器链接在一起,形成一个大计数器。 build 一个时钟或其他东西。

function subcounter(max, name, trigger) {
this.index = 0;
this.trigger = trigger;
this.name = name;

this.tick = function() {
this.index++;
if (this.index==max) {
this.index=0;
this.trigger();
}
}

this.show = function() {
alert(this.name+' triggered');
}
}

y = new subcounter(2,'y',function(){alert('finished')});
x = new subcounter(2,'x',y.tick);

for (var index = 0; index < 12; index++) {
alert ([x.index, y.index]);
x.tick();
}

这没有按预期工作。为了调试,我将上面的行替换为:

x = new subcounter(2,'x',y.show);

并且发现显示的是“x triggered”而不是“y triggered”,这是我所期望的。这里发生了什么? (在 Firefox 中试过)。


感谢您的回答或向我指出有关this 的文档。然而,我的大脑仍然无法理解一个函数如何限定到一个对象实例:'y.show' 可以在不同的对象实例上解析到该函数。

答案似乎是:

x = new subcounter(2,'x',function() {y.tick();});

但我仍然想真正理解为什么原始版本无法按预期工作。

最佳答案

应该是这样的

function subcounter(max, name, trigger) {
var that = this;
this.index = 0;
this.trigger = trigger;
this.name = name;

this.tick = function() {
that.index++;
if (that.index==max) {
that.index=0;
that.trigger();
}
}

this.show = function() {
alert(that.name+' triggered');
}
}

否则 javascript 的本地作用域将使 this 包含对外部上下文 this 的引用(即,在您的情况下为 x.this)内部函数。

Here是一篇详细介绍 javascript 本地作用域功能的帖子,但这只是我得到的第一个结果,这是一个很常见的问题。

关于javascript - 将对象函数传递给对象构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17807776/

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