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

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

本文关键字:新参数 运行 原型 参数 定义 新定义 this quot 函数      更新时间:2023-09-26

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

下面是我的代码示例:
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);
}