我问了以下问题,为什么在js:class use in a prototypal inheritance-based language这样的典型的无类原型继承语言中使用类?
似乎他们是“合成糖”因为大众喜欢阶级..。它们只是背景中的普通js对象。
现在我想知道js假“类”和经典类之间的区别是什么?
发布于 2014-11-21 22:16:36
如果我将JS“类”与Java中的类进行比较,我首先要说的是,JS“类”只是一个对象,而类不是。
对象有自己的属性/字段/方法。这也是JS“类”可以拥有的。但是Java 中的类不能,只有实例可以。
有些人可能会说:“等等,但是静态字段和方法如何?我可以做一个静态MyClass.myField字段-- MyClass.doSomething()方法。”
可以,停那儿吧。但从我的观点来看,它们只是“放置”在MyClass命名空间中,它们并不是类的真正属性:
this,但是可以在JS“类”中的类级方法中使用this。因此,带有静态字段或方法的Java类只是这些字段和方法的名称空间,仅此而已。更明显的是,在静态方法中,您无法找出您所在的类(没有技巧):
因此,在JS中,伪类是一流对象,而在Java中则不是。
发布于 2014-11-21 22:23:15
我可以这样想,在类继承中,父对象被锁定。例如:
class A
{
};
class B extends A
{
};在这里,A的定义被锁定,一旦它被继承,您就不能添加新的属性。
在Javascript的“类”中,您可以:
var o = {x:2};
var b = Object.create(o);
o.y = 5;
b.y
>5您知道我们是如何在“继承”之后添加属性的吗?这是一个不同之处,对象并不是真正的锁定(虽然您可以使用Object.preventExtensions、Object.seal、Object.freeze来锁定对象),但是它们本身可以在任何时候修改对象,并且到原型对象的链接是在子对象中维护的。
https://stackoverflow.com/questions/27070783
复制相似问题