Javascript 不应该';我们不是在es6类中预定义了变量吗?
为什么这会给我一个错误?问题在于Javascript 不应该';我们不是在es6类中预定义了变量吗?,javascript,es6-class,Javascript,Es6 Class,为什么这会给我一个错误?问题在于设p=0
设p=0我只想定义变量,然后在构造函数中为int赋值。如果我去掉让p=0代码>它可以工作,但我不理解它,因为我认为.p应该引用类中的预定义变量,对吗?顺便说一下,我不懂Javascript,我的知识来自Java
class Wizard {
let p = 0;
constructor(p) {
this.p = p;
// TODO replace this line.
}
power () {
return this.p;
}
}
let Gandalf = new Wizard(100);
好吧,JavaScript一开始并不是一种OOP语言,或者至少不像Java那么严格
在这个“软OOP”中,您可以动态地将属性分配给对象,而无需在类中声明它。这就是为什么属性是否被声明并不重要。在尝试将完全不同的OOP范例应用于JS之前,可能需要后退一步,学习一些JS。不要因为JS原型周围有一些语法糖而误以为JS有类,不要认为动态语言与静态语言的工作方式相同;是啊。一般来说,您将键入语义与OOP混淆了。使用不同的方法并不意味着它是非面向对象的。重读我自己,我发现我所说的可能不清楚。我的意思是js并没有遵循OOP的所有原则。例如,封装并不是严格应用的,因为您不仅可以作为默认值直接访问对象属性,还可以动态更改对象属性列表,而无需更改它作为实例的类。对我来说,不同的方法是基于原型的数据结构。当我说js不是OOP时,我确实有点错了。然而,这不是作者在Java中使用的OOP,因此“软OOP”将OOP的所有规则应用于所有OOP语言的问题是它不起作用。“封装”并不意味着不可访问,例如,我不认为有太多人会说Ruby不是OOP,但实际上你可以访问任何东西。即使在Java中,您也可以玩带有反射的游戏。例如,或多或少地总结了这一点。当问题围绕着打字和数据访问时,我不喜欢说“软-/“硬-”OOP,这是另一回事。