<script type="text/javascript">
var Person = function(name){
this.name = name;
p.__proto__ = Person.prototype;
Person.call(p);
var Person = function(name){
this.name = name;
};
//模仿new
var p = {};p.__proto__ = Person.prototype;
Person.call(p);
</script>
__proto__只有火狐有,其它的浏览器是不开放的,像IE,__proto__这个名字就是一个不公开的prototype
function有一个可以公开的prototype
P如果找不到的属性会去找p.__proto__
Person.call(p);
就让this=p;那么this.name 就等于p.name
所以new 出来的Person 就会有属性name
下面我们看看function返回值对new的影响
如function b
如果返回一个{}
那么 var a = new b;
a 等于返回出来的{};
如果返回一个function
那么a 等于返回出来的 function
如果返回一个[1,2,3,4]
那么a等于数组
如果返回 1,"df",undefine,true,则无视,返回对象实例
从这个规则上看,如果返回简单对象,如果返回类型为[object],[function]的话,则返回function里面返回的值.