Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不应该';我们不是在es6类中预定义了变量吗?_Javascript_Es6 Class - Fatal编程技术网

Javascript 不应该';我们不是在es6类中预定义了变量吗?

Javascript 不应该';我们不是在es6类中预定义了变量吗?,javascript,es6-class,Javascript,Es6 Class,为什么这会给我一个错误?问题在于设p=0

为什么这会给我一个错误?问题在于
设p=0让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,这是另一回事。