通过实现区分javascript调用()和应用()
我一直在看关于javascript OOP的视频和实验。但是当涉及到通过实现区分javascript调用()和应用(),javascript,oop,Javascript,Oop,我一直在看关于javascript OOP的视频和实验。但是当涉及到call()和apply()方法时,仍然没有好的结果。我想使用名为send()的邮递员的函数向玩家发送消息,但它总是告诉我: 无法读取未定义的属性“call” 以下是一个例子: 函数播放器(名称){ this.name=名称; this.inbox=[]; } Player.prototype.viewInbox=函数(){ 返回此邮箱; } Player.prototype.msgRecieve=函数(){ 这是inbox.
call()
和apply()
方法时,仍然没有好的结果。我想使用名为send()
的邮递员的函数向玩家发送消息,但它总是告诉我:
无法读取未定义的属性“call”
以下是一个例子:
函数播放器(名称){
this.name=名称;
this.inbox=[];
}
Player.prototype.viewInbox=函数(){
返回此邮箱;
}
Player.prototype.msgRecieve=函数(){
这是inbox.push({
收件人:参数[0],
msg:arguments[1]
});
}
邮递员职能(分部){
this.branchName=分支;
this.send=函数(收件人、消息){
to.msgRecieve.call(参数);
}
}
var anthony=新玩家(“anthony”);
var ph=新邮递员(“ph”);
console.log(anthony.viewInbox())//[]
send博士('anthony','hello anthony')//发送
console.log(anthony.viewInbox());//预期[object{to:'anthony',msg:'hello anthony'}]
调用的第一个参数应该是该在函数调用期间应该具有的值;在上面的示例中,您希望它是到
。然后离散地列出参数,或者改用apply
并使用数组(或arguments
对象)。在这种情况下,您只想传入消息
,因为您正在使用来
,所以:
to.msgRecieve.call(to, message);
call
在它调用的函数中使用您给它的第一个参数作为this
,并将它调用的函数传递给您给它的任何其他参数。例如:
foo.call(something, 'a', 'b', 'c');
…将调用foo
,在调用foo
期间,此
将是某物
,foo的参数是'a'
,'b'
和'c'
还有apply
,除了将函数的参数作为数组(或arguments
对象)提供外,它们完全相同:
不过,还有一些其他问题。同样,您还使用了字符串'anthony'
,而不是变量anthony
。然后在send
中,您希望从到获取名称
(或者最好在msgRecieve
中执行)
函数播放器(名称){
this.name=名称;
this.inbox=[];
}
Player.prototype.viewInbox=函数(){
返回此邮箱;
}
Player.prototype.msgRecieve=函数(msg){
这是inbox.push({
致:this.name,//
call
的第一个参数应该是this
在函数调用期间应该具有的值;在上面的例子中,您希望它是to
。然后离散地列出参数,或者使用apply
并使用数组(或arguments
对象)。在这种情况下,您只想传入消息
,因为您正在使用来
,因此:
to.msgRecieve.call(to, message);
call
在它调用的函数中使用您给它的第一个参数作为this
,并将它调用的函数传递给您给它的任何其他参数。例如:
foo.call(something, 'a', 'b', 'c');
…将调用foo
,在调用foo
期间,此
将是某物
,foo的参数是'a'
,'b'
和'c'
还有apply
,除了将函数的参数作为数组(或arguments
对象)提供外,它们完全相同:
不过,还有一些其他问题。因为,您还使用了字符串'anthony'
,而不是变量anthony
。然后在发送
中,您希望将名称从发送到(或者更好的是,在msgRecieve
中执行此操作)
函数播放器(名称){
this.name=名称;
this.inbox=[];
}
Player.prototype.viewInbox=函数(){
返回此邮箱;
}
Player.prototype.msgRecieve=函数(msg){
这是inbox.push({
致:this.name,//
call
的第一个参数应该是this
在函数调用期间应该具有的值;在上面的例子中,您希望它是to
。然后离散地列出参数,或者使用apply
并使用数组(或arguments
对象)。在这种情况下,您只想传入消息
,因为您正在使用来
,因此:
to.msgRecieve.call(to, message);
call
在它调用的函数中使用您给它的第一个参数作为this
,并将它调用的函数传递给您给它的任何其他参数。例如:
foo.call(something, 'a', 'b', 'c');
…将调用foo
,在调用foo
期间,此
将是某物
,foo的参数是'a'
,'b'
和'c'
还有apply
,除了将函数的参数作为数组(或arguments
对象)提供外,它们完全相同:
不过,还有一些其他问题。因为,您还使用了字符串'anthony'
,而不是变量anthony
。然后在发送
中,您希望将名称从发送到(或者更好的是,在msgRecieve
中执行此操作)
函数播放器(名称){
this.name=名称;
this.inbox=[];
}
Player.prototype.viewInbox=函数(){
返回此邮箱;
}
Player.prototype.msgRecieve=函数(msg){
这是inbox.push({
致:this.name,//
call
的第一个参数应该是this
在函数调用期间应该具有的值;在上面的例子中,您希望它是to
。然后离散地列出参数,或者使用apply
并使用数组(或arguments
对象)。在这种情况下,您只想传入消息
,因为您使用的是