gpt4 book ai didi

javascript - 仅为特定函数调用更改 "this"

转载 作者:行者123 更新时间:2023-11-30 16:27:23 25 4
gpt4 key购买 nike

假设我有这段代码(这是一个简化的例子):

// A Thing that expands other thing can use it's origin Thing's "init".
ThingThatExpands.super = function() {
this.__originThing.init.apply(this, arguments);
}

// I make a Car Thing and give a color and a speed.
var Car = Thing("Toy Car", {
init: function(color, speed) {
this.color = color;
this.speed = speed;
}
});

// Then I make a Racing Car, which inherits the color and speed properties from it's origin
// (that's "Car", of course), but also has a cool sound!
var RacingCar = ThingThatExpands(Car, "Toy Police Car", {
init: function() {
this.super("#00F", 180);
this.sound = "Wee-ooh! Wee-ooh!"
}
})

现在,由于“RacingCar”是“Car”的“ child ”,它具有自己的属性和一个很好的“ super ”函数,可用于调用“Car”的 init。

好的。问题是:由于“super”函数将“child”Thing 赋予“this”,它会改变“child”属性,对吗?好的,这就是我们需要的。但是......这也意味着“ super ”将从“ child ”而不是“起源”事物中调用,这不应该发生(并且不会起作用)。

我能以某种方式“保护”“this.super”调用吗?

最佳答案

要更改特定函数的作用域,您必须将该函数绑定(bind)到所需作用域的对象。

所以如果你想调用foo.bar(),但是在baz的范围内,使用foo.bar.call(baz) 如果您希望函数立即运行,或者使用 foo.bar.bind(baz) 如果您希望它在运行时在应用程序中调用时使用该范围。

关于javascript - 仅为特定函数调用更改 "this",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33902702/

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