gpt4 book ai didi

javascript - 如何在prototype.object上正确绑定(bind) 'this'上下文?

转载 作者:行者123 更新时间:2023-11-28 18:28:54 25 4
gpt4 key购买 nike

代码示例:

function Test() {
this.name = 'test'
}

Test.prototype.normal = function() {
console.log('normal', this.name);
};

Test.prototype.special = {
name: 'special',
start: function () {
console.log("special", this.name);
}
}

test = new Test;

test.normal(); // Response 'normal, test'

test.special.start(); // Response 'special, special'

我希望 special.start 函数记录“特殊,测试”

我怎样才能实现这个目标?我正在使用 CoffeeScript ,所以如果有一个咖啡示例将不胜感激,但是一个 javascript 示例也同样有效!提前致谢!

最佳答案

  1. this 的值在调用时由函数的调用方式决定。
  2. 您想要绑定(bind)到 test (实例),而不是 Test (构造函数)。

如果您不想进行特定的调用时间调整,而是将函数预先绑定(bind)到 test 实例,那么在拥有实例之前这显然不会发生,而且必须发生分别为每个实例。因此,唯一的解决方案是:

function Test() {
this.special = {
start: (function () { ... }).bind(this)
};
}

也许您想要在原型(prototype)上定义函数而不是内联函数;但您仍然需要在构造函数中绑定(bind)它:

function Test() {
this.special = {
start: this._start.bind(this)
};
}

Test.prototype._start = function () { ... };

关于javascript - 如何在prototype.object上正确绑定(bind) 'this'上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38528916/

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