Javascript 重新定义;这";在函数原型中,并使用新参数运行它
我有一个从路径加载数据的函数原型。诀窍是我需要在之后改变路径。我尝试过调用、应用、绑定甚至分配,但由于我是新手,所以没有找到解决方案 下面是我的代码示例:Javascript 重新定义;这";在函数原型中,并使用新参数运行它,javascript,prototype,this,call,bind,Javascript,Prototype,This,Call,Bind,我有一个从路径加载数据的函数原型。诀窍是我需要在之后改变路径。我尝试过调用、应用、绑定甚至分配,但由于我是新手,所以没有找到解决方案 下面是我的代码示例: Chat.prototype.loadMessages = function() { this.messagesRef = this.database; var setMessage = function(data) { var val = data.val(); this.displayMessage(d
Chat.prototype.loadMessages = function() {
this.messagesRef = this.database;
var setMessage = function(data) {
var val = data.val();
this.displayMessage(data.key, val.name, val.text);
}.bind(this);
};
var chat = new Chat
function setPath (newpath) {
chat.loadMessages.messageRef = newpath; // I guess, it is where I'm wrong...
chat.loadMessages(); // It should load messages from the new path in my chat container.
}
正如我所说,我也尝试过:
chat.loadMessages.call(newpath);
或
但是聊天容器继续泄漏来自旧路径的消息…这看起来有点复杂。只需将
messagesRef
作为参数传递,并将其默认设置为this。数据库
:
Chat.prototype.loadMessages = function(messagesRef = this.database) {
// do whatever is needed with messagesRef
};
chat = new Chat();
chat.loadMessages(); // load from the default location
chat.loadMessages('foobar'); // load from this specific location
看起来您正在使用loadMessages创建一个函数,这很好,但您需要传入一个值来设置新路径。这是你想的吗
Chat.prototype.loadMessages = function (newPath) {
this.messagesRef = newPath || this.database; // if newPath is empty than default to this.database
var setMessage = function(data) {
var val = data.val();
this.displayMessage(data.key, val.name, val.text);
};
var chat = new Chat
function setPath (newpath) {
chat.loadMessages(newpath);
}
那么chat.loadMessages.database=newpath;chat.loadMessages()代码>?您可能需要在以后恢复该属性。非常感谢,它工作得非常好,并且做得非常简单,正如我所想的那样。对于我的案例,似乎不起作用,因为messageRef也用于其他函数,我需要将其作为“this.messageRef”的原型保留。
Chat.prototype.loadMessages = function (newPath) {
this.messagesRef = newPath || this.database; // if newPath is empty than default to this.database
var setMessage = function(data) {
var val = data.val();
this.displayMessage(data.key, val.name, val.text);
};
var chat = new Chat
function setPath (newpath) {
chat.loadMessages(newpath);
}