Javascript存储类的值

时间:2018-05-21 21:27:43

标签: javascript

当我们做这样的事情时

const something = class extends anything {
} 

它是什么意思或它做什么?它是否将类的值存储在变量中?这将如何与

不同
class something extends anything {
}

2 个答案:

答案 0 :(得分:3)

javascript中没有“class”这样的东西,就像它们存在于像Java这样的基于类的语言中一样。在JS中,类语法在相同的旧构造函数上是糖。当您理解这一点时,您的问题就变得更容易理解了。

此:

const something = class extends anything {
}

(大致)类似于:

const something = function() {
}
something.prototype = Object.create(anything.prototype)

这些变体也有同样的相似之处:

class something extends anything {
}

function something() {
}
something.prototype = Object.create(anything.prototype)

函数是javascript中的第一类对象,这意味着它们可以被视为值并传递。 const something = class...class something... 之间的区别在于第一个是类表达式(将类似值赋值给可以传递的变量),第二个是类声明(声明类和给它一个名字,但不给它分配一个变量),但在大多数情况下它们是可以互换的。

为了澄清,当你执行something.prototype = Object.create(anything.prototype)时,这是Javascript使用的实际继承。它大致意味着您使用构造函数的“原型”并将其用作下一个函数的基础,这意味着您使用new something()创建的任何对象都将具有anything的原型,以及您需要添加到something.prototype的任何其他属性。

您可以在此处获得更深入的信息:Inheritance and the prototype chainPrototypal Inheritance in JavaScript

答案 1 :(得分:2)

请注意,声明const something = code在实践中意味着以下所有内容都是不可能的:

function something(){//code}
  var something;
  let something;
  class something{
//whatever
  }

保留该特定名称,const的目的是,否则,您可以使用相同的名称重写类本身:

 var something = class anything {//code
  }

  var something = class anything {//code changes previous class
  }

同样,这是不可能的:

class anything {//code
      }
class anything {//code changes previous class
      }

你无法改变任何事情。所以我认为const something = classclass something extends anything之间没有实际区别,因为两者都是保留的名称和#34;版本"其他课程。