Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重新定义;这";在函数原型中,并使用新参数运行它_Javascript_Prototype_This_Call_Bind - Fatal编程技术网

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