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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/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_Oop - Fatal编程技术网

通过实现区分javascript调用()和应用()

通过实现区分javascript调用()和应用(),javascript,oop,Javascript,Oop,我一直在看关于javascript OOP的视频和实验。但是当涉及到call()和apply()方法时,仍然没有好的结果。我想使用名为send()的邮递员的函数向玩家发送消息,但它总是告诉我: 无法读取未定义的属性“call” 以下是一个例子: 函数播放器(名称){ this.name=名称; this.inbox=[]; } Player.prototype.viewInbox=函数(){ 返回此邮箱; } Player.prototype.msgRecieve=函数(){ 这是inbox.

我一直在看关于javascript OOP的视频和实验。但是当涉及到
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
对象)。在这种情况下,您只想传入
消息
,因为您使用的是