gpt4 book ai didi

javascript - 当原型(prototype)包含对象时访问 `this` 值?

转载 作者:行者123 更新时间:2023-11-30 08:36:20 25 4
gpt4 key购买 nike

我有一个像这样的:

 function Foo() {
this._current = -1;
}
Foo.prototype.history = {};
Foo.prototype.history.back = function () {
if (this._current === undefined) {
return alert("this._current is undefined");
}
--this._current; // `this` is the history object
};

如何在 back 方法中访问 Foo 实例?

我看到的解决方案是做这样的事情:

var f = new Foo();
f.history.back = f.history.back.bind(f);

是否有更好的解决方案?对每个 Foo 实例都这样做对我来说听起来不太好。


这是一个例子:

function Foo() {
this._current = -1;
}
Foo.prototype.history = {};
Foo.prototype.history.back = function() {
if (this._current === undefined) {
return alert("this._current is undefined");
}
--this._current; // `this` is the history object
};

var f = new Foo();
f.history.back();

我知道应该是这样,但是解决这类问题的正确方法是什么?

最佳答案

您的代码中的根本问题是您只有一个history 对象在Foo 的所有实例之间共享。您必须为每个实例创建一个 history。一个解决方案是这样的:

function FooHistory(foo){
this._foo = foo;
}
FooHistory.prototype.back = function() {
if (this._foo._current === undefined) {
return alert("this._foo._current is undefined");
}
this._foo._current--;
};

function Foo() {
this._current = -1;
this.history = new FooHistory(this);
}
var f = new Foo();
f.history.back();

(您可能希望在 FooHistory 实例中使用 _current 而不是 Foo 实例,我尝试尽可能少地更改代码)

请注意,根据更大的 View ,其他解决方案也是可能的。如果您没有任何状态可存储在历史对象中,那么您还可以让 Foo.prototype.history() 返回一个对象,该对象的属性链接回 Foo 实例。然后你会调用 f.history().back()

关于javascript - 当原型(prototype)包含对象时访问 `this` 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31074131/

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