使用 Object.create 进行继承
Using Object.create for inheritance?
这段代码来自 MDN 关于 Object.create()
的文章:
// Shape - superclass
function Shape() {
this.x = 0;
this.y = 0;
}
// superclass method
Shape.prototype.move = function(x, y) {
this.x += x;
this.y += y;
console.info('Shape moved.');
};
// Rectangle - subclass
function Rectangle() {
Shape.call(this); // call super constructor.
}
// subclass extends superclass
Rectangle.prototype = Object.create(Shape.prototype);
Rectangle.prototype.constructor = Rectangle;
var rect = new Rectangle();
倒数第三行是我感到困惑的那一行。
两者之间有什么区别:
答:现在怎么样了。
B. Rectangle.prototype = Object.create(Shape);
C. Rectangle.prototype = new Shape();
难道所有 3 个最终不会产生相同的结果吗?在rect
上定义的相同属性和相同的内存使用来定义它们?
是的,我已经阅读了其他解决Object.create()
的StackOverflow问题。不,他们没有完全解决我的困惑。
-
Object.create(Shape)
返回一个继承自Shape
的对象。如果你想做一个
Shape
的子类,你可能不想这样做。 -
Object.create(Shape.prototype)
返回一个继承自Shape.prototype
的对象。因此,此对象将不具有
x
和y
自己的属性。 -
new Shape()
这样做:- 创建一个继承自
Shape.prototype
的对象。 - 调用
Shape
,将前一个对象作为this
传递。 - 返回该对象(假设
Shape
没有返回另一个对象)。
因此,此对象将具有
x
和y
自己的属性。 - 创建一个继承自
相关文章:
- 从控制器继承了隔离的作用域以生成可重用的指令
- 两个指令创建新的继承的和隔离的作用域-元素得到哪个
- 当使用控制器作为语法时,如何从父指令继承属性
- 以jquery方式继承Javascript
- AngularJS Navigation (li ng-repeat, create header li), DOM
- 使用Object.create()的角度服务继承
- 使用Object.create作为原型的原型继承将[Object]作为实例的原型
- 使用 Object.create 进行继承
- 为什么 Object.create 在 JavaScript 中的原型继承方面没有做我所期望的
- Javascript Object.create 不是从父级继承的
- Javascript OOP 继承了 create GLOBAL 对象
- ECMAScript 5定义了用于构造和继承的通用工厂模式[Object.create()]
- 原型继承和Object.create
- Object.create与新继承混淆
- 使用Object.assign和Object.create进行继承
- 是否可以确定使用object创建的对象.create继承了JavaScript中的Array
- Object.create(BaseObject)和util的区别是什么?继承(MyObject BaseObject)
- 没有new或Object.create的原型继承
- JavaScript继承Object.create()未按预期工作
- Object.create与直接原型继承