关于js对象实例化的问题

Lloooong 2014-11-22 08:47:02


var Person = function(name) {
    this.name = name;
this.showMsg=function(){
alert(name);
}
var p = new Person();
p.showMsg();//我的疑惑就是为什么这里能调用Person的方法showMsg()
//new操作符的操作是
//var p = {}
//p.__proto__ =  Person.prototype
//Person.call(p)

new的作用不就是把Perosn的prototype给p的属性__proto__吗?person的prototype又没有方法showMsg。call只是把把Person的this替换为p。实在不明白为什么p就能调用person中放入方法了呢?
...全文
154 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
风动之石 2014-11-26
  • 打赏
  • 举报
回复
引用 2 楼 Lloooong 的回复:
哦 对!啊呀呀 谢谢你
第一次帮助别人,而且帮上了忙,好激动....
Lloooong 2014-11-22
  • 打赏
  • 举报
回复
引用 1 楼 cxl444905143 的回复:
new Person();的执行过程: 1、首先new 操作符会新建一个对象p 2、将Person的原型赋给p的原型 3、在p上调用Person()函数,Person.call(p) 的意思是在p对象上调用Person(),将this绑定到p上,即会执行 p.name = name; p.showMsg=function(){ alert(name); } 这样的话,p对象上就有了showMsg()方法, 4、上述过程执行完成之后,返回 p。 所以,p上就有showMsg()方法了。
哦 对!啊呀呀 谢谢你
风动之石 2014-11-22
  • 打赏
  • 举报
回复
new Person();的执行过程: 1、首先new 操作符会新建一个对象p 2、将Person的原型赋给p的原型 3、在p上调用Person()函数,Person.call(p) 的意思是在p对象上调用Person(),将this绑定到p上,即会执行 p.name = name; p.showMsg=function(){ alert(name); } 这样的话,p对象上就有了showMsg()方法, 4、上述过程执行完成之后,返回 p。 所以,p上就有showMsg()方法了。

87,984

社区成员

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

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