gpt4 book ai didi

javascript:如何访问正确的上下文

转载 作者:行者123 更新时间:2023-12-01 02:30:00 26 4
gpt4 key购买 nike

我需要编写如下所示的 Javascript 代码。问题是我无法从 _notifHandlers.typeA_notifHandlers.typeB_notifHandlers.typeGeneric 中访问“this”(它应该指向第 1 行的“obj”)

我知道我可以将“this”作为参数传递给这些函数并使用它来访问正确的上下文。但还有更好的办法吗?

var obj = {
handleNotification : function(managedObj) {

if (this._notifHandlers.hasOwnProperty(managedObj.id)) {
this._notifHandlers[managedObj.id](managedObj);
} else {
this._notifHandlers.typeGeneric(managedObj);
}

},

_notifHandlers : {
typeA : function(managedObj) {
console.info("_notifHandlers " + managedObj.id + " selected.");
var model = "modelA"; // TODO:
this.showUI(managedObj, model);
},
typeB : function(managedObj) {
console.info("_notifHandlers " + managedObj.id + " selected.");
var model = "modelB"; // TODO:
this.showUI(managedObj, model);
},
typeGeneric : function(managedObj) {
console.info("_notifHandlers " + managedObj.id + " selected.");
var model = "typeGeneric"; // TODO:
this.showUI(managedObj, model);
}
},

showUI : function(managedObj, model) {
// TODO:
console.log("In showUI(): model -> " + model)
}
}

var managedObject = {
id : "typeB"
}

obj.handleNotification(managedObject);

最佳答案

使用call方法

工作 fiddle https://jsfiddle.net/andreitodorut/an15zkja/

var obj = {
handleNotification : function(managedObj) {

if (this._notifHandlers.hasOwnProperty(managedObj.id)) {
this._notifHandlers[managedObj.id].call(this,managedObj);
} else {
this._notifHandlers.typeGeneric.call(this,managedObj);
}

},

_notifHandlers : {
typeA : function(managedObj) {
console.info("_notifHandlers " + managedObj.id + " selected.");
var model = "modelA"; // TODO:
this.showUI(managedObj, model);
},
typeB : function(managedObj) {
console.info("_notifHandlers " + managedObj.id + " selected.");
var model = "modelB"; // TODO:
this.showUI(managedObj, model);
},
typeGeneric : function(managedObj) {
console.info("_notifHandlers " + managedObj.id + " selected.");
var model = "typeGeneric"; // TODO:
this.showUI(managedObj, model);
}
},

showUI : function(managedObj, model) {
// TODO:
console.log("In showUI(): model -> " + model)
}
}

var managedObject = {
id : "typeB"
}

obj.handleNotification.call(obj,managedObject);

关于javascript:如何访问正确的上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48379338/

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