Object.create和new的区别

参考:https://www.zhihu.com/question/34183746
https://blog.csdn.net/blueblueskyhua/article/details/73135938

再说区别之前我们先要明确一些相关的概念:
1、对象有属性__proto__,指向该对象的构造函数的原型对象
2、方法除了有属性__proto__,还有属性prototype,prototype指向该方法的原型对象
图示
再补充一个面试中遇到的问题:Object的原型是什么?
我在控制台打印下面两个值Object.__proto__Object.prototype,得到如下结果:
这里写图片描述

创建对象的两种方式Obeject.create和new

var Base = function () {}
var o1 = new Base();
var o2 = Object.create(Base);

var o1 = new Base();的实质:

var o1 = new Object();
o1.[[Prototype]] = Base.prototype; 
//[[Prototype]]不能被取到,它相当于o1.__proto__ = Base.prototype
Base.call(o1);

var o2 = Object.create()的实质:

Object.create =  function (o) {
    var F = function () {};
    F.prototype = o;
    return new F();
};

举个例子:

var Base = function () {
    this.a = 2
}
Base.prototype.a = 3;
var o1 = new Base();
var o2 = Object.create(Base);
console.log(o1.a);
console.log(o2.a);

图示
综上,他们俩比较明显的区别就是:new关键字创建的对象会保留原构造函数的属性,而用Object.create()创建的对象不会。

instanceof和isPrototypeOf

A.isPrototypeOf(B) :A对象是否存在于B对象的原型链之中
A instanceof B :B.prototype是否存在与A的原型链之中

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值