关于js对象实例化的有关问题

关于js对象实例化的问题


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中放入方法了呢?

------解决思路----------------------
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()方法了。