当我们做这样的事情时
const something = class extends anything {
}
它是什么意思或它做什么?它是否将类的值存储在变量中?这将如何与
不同class something extends anything {
}
答案 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 chain和Prototypal 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 = class
和class something extends anything
之间没有实际区别,因为两者都是保留的名称和#34;版本"其他课程。