在函数原型中重新定义 "this" 并使用新参数 运行

Redefine "this" within a function prototype and run it with new parameters

我有一个从路径加载数据的函数原型。诀窍是我之后需要更改路径。我试过调用、申请、绑定甚至分配,但由于我是新手,我没有找到解决方案。

这是我的代码示例:

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);

 var setPath = function(newpath) {
      chat.loadMessages(newpath);
      }.bind(chat);
      setPath();
 chat.loadMessages();

但是聊天容器继续泄露来自旧路径的消息...

这看起来有点费解。只需将 messagesRef 作为参数传递并使其默认为 this.database:

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);
}