gpt4 book ai didi

javascript - 确保原型(prototype)方法中的 "this"上下文

转载 作者:行者123 更新时间:2023-11-29 21:35:44 28 4
gpt4 key购买 nike

对于 prototype 方法,是否有一种安全的方法来确保 this 始终是对象本身(检查 instanceof 和抛出错误之外).

var Dialog = function() {};
Dialog.prototype.open = function() {
var open = this;
// how do ensure "this" is always the Dialog
console.log(open);
};

使用此代码,任何用户都可能错误地“强制”上下文不正确。例如:

var pointer = new Dialog().open;
pointer(); // "this" would become Window

我正试图找到一种内部处理此问题的方法,这样我就不必抛出错误或依赖用户始终做正确的事情。

用户总是可以调用 pointer.call(dialog) 但这意味着他们需要一个单独的对话框指针,这是一个很好的例子,说明了用户而不是我的负担,作者。

最佳答案

这真的很奇怪,有点破坏了通过原型(prototype)继承获得的性能提升,但您可以在构造函数中显式绑定(bind)每个函数。

function log(obj) {
document.querySelector('pre').innerText += obj.toString() + '\n';
}

function Dialog() {
this.open = this.open.bind(this);
}
Dialog.prototype.open = function() {
log(this);
};
Dialog.prototype.toString = function() {
return '[object Dialog]';
};

var d = new Dialog();
d.open();
var open = d.open;
open();
<pre></pre>

这将为 Dialog 的每个实例的每个方法创建唯一的函数对象,但从技术上讲它会按预期工作。

关于javascript - 确保原型(prototype)方法中的 "this"上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34930744/

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