Warum kann ich setTimeout
in einem Javascript-Objekt nicht verwenden?Wie "setTimeout" verwenden, um Objekt selbst aufzurufen
Message = function() {
...
...
this.messageFactory = ...
this.feedbackTag = document.getElementById('feedbackMessages');
this.addInfo = function (message) {
var info = this.messageFactory.createInfo(message); // create a div
this.feedbackTag.appendChild(info);
setTimeout('this.feedbackTag.removeChild(info)', 5000);
// why in here, it complain this.feedbacktag is undefined ??????
};
}
Dank für Steve`s Lösung arbeiten wird es nun, wenn der Code wie unten ist ... , weil die ‚this‘, bevor sie tatsächlich wurde auf die Funktion innerhalb setTimeOut zeigt, ist es nicht rearch Nachricht kann.
Message = function() {
...
...
this.messageFactory = ...
this.feedbackTag = document.getElementById('feedbackMessages');
this.addInfo = function (message) {
var info = this.messageFactory.createInfo(message); // create a div
this.feedbackTag.appendChild(info);
var _this = this;
setTimeout(function() { _this.feedbackTag.removeChild(info); }, 5000);
};
}
Aber warum doesn `t es, wenn wir dies tun:
Message = function() {
...
...
this.messageFactory = ...
this.feedbackTag = document.getElementById('feedbackMessages');
// public function
this.addInfo = function (message) {
var info = this.messageFactory.createInfo(message); // create a div
this.feedbackTag.appendChild(info);
delayRemove(info);
};
// private function
function delayRemove(obj) {
var _this = this;
setTimeout(function() { _this.feedbackTag.removeChild(info); }, 5000);
}
}
möglich Duplikat von [Wie der richtige 'this/context innerhalb eines Callbacks zugreifen?] (Http://stackoverflow.com/q/20279484/1048572) – Bergi
Duplikate: [setTimeout() innerhalb JavaScript-Klasse mit" this "] (Http://stackoverflow.com/questions/5911211/settimeout-inside-javascript-class-using-this) und [Verwenden von setTimeout() innerhalb einer JavaScript-Klassenfunktion] (http://stackoverflow.com/questions/ 6997921/using-settimeout-innerhalb-einer-javascript-class-function) – handle