gpt4 book ai didi

javascript - Call/Apply 比传递上下文更可取吗?

转载 作者:行者123 更新时间:2023-11-30 05:45:55 24 4
gpt4 key购买 nike

我将通过一些代码来启动它。让我们有一个对象:

function SomeObject() {
this.arbitraryVarINeed = 5;
}

现在一种方法是:

SomeObject.prototype.stuffToBeDone() {
var context = this;
function heyThere() {
console.log(context.arbitraryVarINeed);
}
heyThere();
}

和另一个:

SomeObject.prototype.stuffToBeDone() {
function heyThere() {
console.log(this.arbitraryVarINeed);
}
heyThere.call(this);
}

现在在这个简单的例子中,显然 call 会更可取。但是这个怎么样,.call/.apply 是否适用?

SomeObject.prototype.stuffToBeDone() {
var hello = document.createElement("brofist");
var context = this;
hello.onBroEvent = function (event) {
event.target.innerBro = context.arbitraryVarINeed;
}
}

如果我必须在重复使用 .call/.apply 或只是保存保存在某处的上下文之间做出选择,我应该选择前者还是后者?什么是快速的选择,什么是安全的选择,两种方法中的一种是否比另一种更好?

由于 Jakob 的回答,事件/匿名函数示例也可以通过 .bind 解决。那么是不是完全没有必要传递上下文呢?

最佳答案

不是您问题的完整答案,但对于您的最后一个示例,还有第三种方法。正如您自己猜测的那样,您不能真正使用call/apply,但可以使用bind:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

像这样:

SomeObject.prototype.stuffToBeDone() {
var hello = document.createElement("brofist");
var context = this;
hello.onBroEvent = (function(event) {
event.target.innerBro = this.arbitraryVarINeed;
}).bind(this);
}

关于javascript - Call/Apply 比传递上下文更可取吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17987905/

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