javascript中的new 操作

前端之家收集整理的这篇文章主要介绍了javascript中的new 操作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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

猜你在找的JavaScript相关文章