先来看一个Object.create和new的小题目:

结果是1和undefined,为什么不是1和2?

分析

new一般我们用的比较多,但是Object.create可能接触的比较少,这两个东西比较类似,但是用途却不太一样,我们先来看看new的时候做了什么:

注意,因为new的时候用了call,所以返回的对象除了可以访问prototype上的属性,还可以访问内部this上的对象,由于内部this上和prototype上都设置了a,优先访问内部this上的a ,所以为1。

现在看看Object.create干了啥:

我们可以看到,Object.create让一个方法的prototype指向一个对象,由于这里传入的是fuck对象本身,而fuck对象本身是没有a属性的,为什么不会返回fuck.prototype.a?,因为这里没有设置__proto__,所以沿着原型链找不到fuck.prototype。

其实想要达到效果,可以将代码修改一下:

或者,如下:

Object.create

其实Object.create和new的功能不一样,new是用来创造实例的,而Object.create一般是在继承的时候用。

继承的时候有几个很重要的点,第一就是调用call复制父类中this相关变量,第二就是复制父类的prototype方法,但是Object.create会将constructor变成父类的,因此要纠正过来。

其他文章

0
我要评论

评论

返回
×

我要评论

回复:

昵称:(昵称不超过20个字)

图片:

提交
还可以输入500个字