function Person(name){
this.name=name;
}
Person.prototype.getName=function(){
return this.name;
}
var a=new Person('sven');
console.log(a.name());//sven
console.log(a.getName());//sven
之前一直没有注意这个new 操作符到底干了什么,从Moriz文档查询到new的定义:
new运算符的作用是创建一个对象实例。这个对象可以是用户自定义的,也可以是一些系统自带的带构造函数的对象。
然后对于理解new到底是如何实现还是一无所知。
简单的来说我们在js中的每一个对象都是Object.prototype克隆形成的,Object.prototype对象就是他们的原型。
下面的代码就很好的阐述了new的实现
var objectFactory=function(){
var obj=new Object();//从Object.prototype克隆一个空的对象
Constructor=[].shift.call(arguments);//通过call获取传入参数的构造函数,此例为Person
obj._proto_=Constructor.prototype;//Pesrson的prototype指向obj的_proto
var ret=Constructor.apply(obj,arguments);//把构造函数的所有参数给obj设置属性
return typeof ret==='object'?ret:obj;//确保构造函数始终范围一个对象
};
var b=objectFactory(Person,'eight');
console.log(b.name());//eight
console.log(b.getName());//eight