【前端知识之JS】Object.create和new的区别以及Object.create的实现

前言

本系列主要整理前端面试中需要掌握的知识点。本节介绍Object.create和new的区别以及Object.create的实现。


一、Object.create和new的区别

Object.create能够创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。 --MDN
new创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。

举例说明,清晰明了:

function A() {
    this.name = 'abc';
}
A.prototype.a = 'a';
A.prototype.showName = function () {
    return this.name;
}
var a1 = new A();
var a2 = Object.create(A);
console.log('new方法:');
console.log(a1);
console.log('create方法:');
console.log(a2);

按照定义来看,new创建了一个实例,这个实例就是用户定义的对象类型,create应该是创建了一个对象,这个对象的原型是A。
按照结果来看,new创建的实例中既有对象A原本的属性,也包括原型上的属性;create创建的对象的原型为对象A,但是没有里面的属性,同样有原型上的属性。
                      

二、Object.create的使用

语法:Object.create(proto, [propertiesObject])
参数:
①proto:传递一个现在有的对象,即新对象的原型对象(新创建的对象_proto_属性指向现有属性)。第一个参数proto的值为null,那么创建出来的对象是一个{}(空对象)并且没有原型;
②propertiesObject:可选,给新对象添加新属性以及描述器。如果没有指定即创建一个{},有原型也有继承Object.prototype上的方法。
可以通过Object.create(null) 创建一个干净的对象,也就是没有原型

三、Object.create的实现

new的实现可以看【前端知识之JS】JS中new关键字的具体操作

function mycreate(obj){
    // 创建一个对象
    function F(){}
    // 使用现有的对象来提供新创建的对象的__proto__
    F.prototype = obj
    // 返回F的实例
    return new F()
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值