在函数原型中重新定义 "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);
}
我有一个从路径加载数据的函数原型。诀窍是我之后需要更改路径。我试过调用、申请、绑定甚至分配,但由于我是新手,我没有找到解决方案。
这是我的代码示例:
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);
}