搞清Object.create和new

new的实现原理:

new 运算符是创建一个自定义对象或者具有构造函数的内置对象的实例

function new(func) {
    // 创建一个新对象
    lat target = {};
    // 新对象继承了func原型上的属性
    target.__proto__ = func.prototype;
    // 将构造函数的作用域赋值给新对象
    let res = func.call(target);
    // 如果函数没有返回其他对象、方法,则返回新对象。
    if (typeof(res) == "object" || typeof(res) == "function") {
        return res;
    }
    return target;
}
    let F = function () {
      this.name = "小路"
    }
    F.prototype.count = 5
    let fn1 = new F()
    console.log(F.prototype)
    console.log(fn1)


new出来的fn1继承了构造函数F上的方法和原型链上属性。

Object.create的实现原理:

Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。

Object.create =  function (o) {
    // 创建新函数
    var F = function () {};
    // 函数原型指向传入值
    F.prototype = o;
    // 通过new实现
    var newObj=new F();
    return newObj;
};
    let F = function () {
      this.name = "小路"
    }
    F.prototype.count = 5
    let fn2 = Object.create(F)
    console.log(fn2)

Object.create()能继承原型上的属性,且创建出一个空的对象或者方法。

Object.create()第二个值则是要添加到新创建对象的可定义其可枚举属性或修改的属性描述符的对象。

let fn2 = Object.create(F, {
      p: {
        //初始值默认为 undefined.
        value: 6,
        // 可赋值(改)
        writable: true,
        // 可枚举
        enumerable: true,
        // 可配置(删除)
        configurable: true
      }
    })
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值