为了指示应该使用哪个构造函数来创建派生对象,JavaScript 有一个名为 Symbol.species 的独特属性。在创建类或对象的新实例时,此符号用作类或对象原型中的键,以标识要使用的构造函数。
Symbol.species 属性允许用户指定应该使用哪个构造函数来创建类或子类的新实例。
语法
以下是 JavaScript Symbol.species 属性的语法 -
[Symbol.species]
参数
species 访问器属性用于允许子类覆盖默认构造函数。
返回值
此属性返回派生对象。
示例 1
让我们看看下面的例子,我们将在其中使用 map() 方法。
<html>
<style>
body {
font-family: verdana;
color: #DE3163;
}
</style>
<body>
<script>
class x extends Array {
static get[Symbol.species]() {
return Array;
}
}
const a = new x(11, 2, 33);
const b = a.map(x => x * 2);
document.write(b instanceof x, " < br > ");
document.write(b instanceof Array);
</script>
</body>
</html>
如果我们执行上述程序,它将在网页上显示文本。
示例 2
请考虑以下示例,我们将在其中使用 slice() 方法。
<html>
<style>
body {
font-family: verdana;
color: #DE3163;
}
</style>
<body>
<script>
class x extends Uint8Array {
static get[Symbol.species]() {
return Uint8Array;
}
}
const a = new x([11, 22, 33, 44]);
const b = a.slice(1, 2);
document.write(b instanceof x, " < br > ");
document.write(b instanceof Uint8Array);
</script>
</body>
</html>
在执行上述脚本时,它将在网页上显示文本。
示例 3
在下面的示例中,我们将创建一个 subclass 并在 subclass 的实例上使用 then() 方法。
<html>
<style>
body {
font-family: verdana;
color: #DE3163;
}
</style>
<body>
<script>
class x extends Promise {
static get[Symbol.species]() {
return Promise;
}
}
const a = new x((resolve, reject) => {
resolve('welcome');
});
const b = a.then(result => result.toUpperCase());
document.write(b instanceof x, " < br > ");
document.write(b instanceof Promise);
</script>
</body>
</html>
当我们执行脚本时,它会在网页上显示一个文本。