玩笑过后

导航

new命令简化的内部流程

构造函数返回对象的一些问题:

function fn(name,age){
        this.name = name;
        this.age = age;
        //return 23; 忽略数字,直接返回原有对象
        //return {};如果是对象直接顶替原有默认返回的对象
        //如果没有return 则默认返回对象
    }

new命令简化的内部流程,可以用下面的代码表示

function _new(/*构造函数*/constructor,/*构造函数参数*/params){
        /*把参数转化为数组*/
        var args = [].slice.call(arguments)
        /*分理出构造函数*/
        var constructor = args.shift()
        /*创建一个空对象,并继承构造函数的原型*/
        var context = Object.create(constructor)
        /*执行构造函数*/
        var result = constructor.applay(context,params)
        //返回结果对象,就直接返回,否则返回 context 对象,如果构造函数有return 返回值,则result有值
        return (typeof result === 'Object' result != null) ? result : context 
    }

 

posted on 2018-09-27 13:50  玩笑过后  阅读(178)  评论(0编辑  收藏  举报