关于call方法的使用问题

qq_36873640 2018-03-17 09:12:56
var name="李四";
function Person(name,age,sex){
this.name=name;
this.age=age;
this.sex=sex;
this.printName=function () {
alert(this.name);
}
}
var p=new Person("王五",22,"男");
p.printName();

p.printName.call(); //为什么这里打印出的结果是李四,下面打印的结果是王五???
p.printName().call();
...全文
326 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
似梦飞花 2018-03-18
  • 打赏
  • 举报
回复
引用 3 楼 qq_36873640 的回复:
[quote=引用 1 楼 zzgzzg00 的回复:] p.printName.call(); 等同于p.printName.call(window); this指向了window 非严格模式 p.printName().call();先p.printName() 打印王五 返回undefined 于是undefined,call() 报错
为什么是返回undefined呢?是因为函数没有写return语句就自动返回undefined吗?[/quote]对
qq_36873640 2018-03-18
  • 打赏
  • 举报
回复
引用 1 楼 zzgzzg00 的回复:
p.printName.call(); 等同于p.printName.call(window); this指向了window 非严格模式 p.printName().call();先p.printName() 打印王五 返回undefined 于是undefined,call() 报错
为什么是返回undefined呢?是因为函数没有写return语句就自动返回undefined吗?
似梦飞花 2018-03-17
  • 打赏
  • 举报
回复
p.printName.call(); 等同于p.printName.call(window); this指向了window 非严格模式 p.printName().call();先p.printName() 打印王五 返回undefined 于是undefined,call() 报错
Go 旅城通票 2018-03-17
  • 打赏
  • 举报
回复
call是改变执行方法时内部this指向用的 第一个你没有传递参数,默认为window,所以printName内部的this为window,输出window作用域下的name变量值李四 第二个是你调用了对象的方法后,将方法的防止值再call调用,你要搞清楚怎么调用的。主调对象是p,p是实例,指向内部的name王五,然后将printName的返回值作为call再次调用的方法,由于没有返回值默认undefined,你调用call报错了 javascript函数属性caller和arguments callee介绍

87,954

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧