前端笔记二(new与Object.create区别)
2019-03-12 本文已影响0人
沐雨芝录
1.创建对象的方式,Object.create 和new来说明
var Base = function () {}
var o1 = new Base();
var o2 = Object.create(Base);
- Object.create的实现方式:
Object.create = function (o) {
var F = function () {};
F.prototype = o;
return new F();
};
简单来说就是内部创建一个空函数,将函数的prototype指向传参的对象,然后返回new的实例。
- new Base()的时候new做了什么?
var o1 = new Object();
o1.__proto__ = Base.prototype;
Base.call(o1);
简单来说:新建一个obj对象o1,并且让o1的__proto__
指向了Base.prototype
对象。并且使用call
进行强转作用环境。
总结:
-
Object.create
没有指向他的prototype
,所以访问不到Base原型上的属性。 - 这也就说明了
__proto__
和prototype
的区别。所以上面在prototype定义的a,只是Base的prototype
对象上的一个属性。 - new关键字必须是以function定义的。
- Object.create 则 function和object都可以进行构建。
上一篇:前端笔记一(proto,prototype,constructor)
下一篇:前端笔记三(js创建对象的方式)