ES5实现new功能


function myNew(){
    var constructor = Array.prototype.shift.call(arguments), //获取第一个参数
        result = null, //存结果
        newObj = null, //存放新对象
        flag = false; //判断返回值是不是对象或函数flag
    if(!constructor || typeof constructor !== 'function'){//判断参数
        throw new Error('类型错误!')
    }
    newObj = Object.create(constructor.prototype); //创建新空对象,对象原型为构造函数的 prototype 对象
    result = constructor.apply(newObj, arguments); //this 指向新建的对象,并执行函数
    flag = result && typeof result === 'object' || typeof result === 'function' ? true : false; //判断返回值类型
    return flag ? result : newObj; //如果是值类型,返回创建的对象。如果是引用类型,就返回这个引用类型的对象
}

使用方法


function example(name){
    this.name = name;
    this.sayName = function(){
        console.log(this.name)
    }
}
var myExample = myNew(example, 'effie');

运行结果如下:
​​​​在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值