搞清楚原型继承中内存地址和运行环境的问题,感觉是个比较重要的概念,记录一下。

在这幅图中,我们为Admin的原型添加了一个state()方法,如图有两种方式,

被注释的第一种方式有一定的限制(一定要在设置原型链继承之前设置)

因为这种方式是Admin.prototype在内存空间重新建立了一块新的地址来存放数据,只不过里面的constructor仍然指向源Admin,

如果先设置了Admin.prototype的继承,那么如此一来,Admin.prototype对User.prototype的继承指向就会丢失,未被引用的这个“Admin.prototype”会被自动垃圾回收。

新建立带有state()方法的Admin原型并没有指向User.prototype作为原型链上级。

而Admin.prototpye.state = ... 是在既有的内存地址中进行的数据添加,那么地址指向仍然不变。

这两者一定不能放在一起使用,因为他们都不是对既有数据的改写,而是在内存构建新的地址,不管什么编写顺序都会造成冲突。

注意,使用Obeject.create的时候是没有constructor构造函数的,而且使用这种添加方式的构造函数会有一些权限变化。

原文地址:https://www.cnblogs.com/uX-180506/p/12463612.html