我认识到某些 JavaScript 对象具有内部槽属性,在规范中用双方括号 [[ ]] 表示,只能通过方法访问。
例如:
var str = new String('example');
检查变量 str
时,我发现内部槽 [[PrimitiveValue]] 的值为 'example'
,但我无法直接访问,因为它是内部的。访问它的唯一方法是通过方法toString()
。
我的问题是:如何使用自定义内部属性和访问该属性的自定义方法来实现具有该行为的自定义对象?
最佳答案
[[PrimitiveValue]]
是一个内部属性,you can't interact with it from your code 。但是您可以通过重写 toPrimitive
方法来模拟 String
类的行为:
var str = {
[Symbol.toPrimitive]: (hint) => {
return 'example';
}
};
console.log(`${str}`); // 'example'
toPrimitive
方法在 EcmaScript 6.0, 7.1.1 中定义。 。它通过一个名为 hint
的参数调用,该参数可以是 'default'
、'string'
或 'number'
。您可以根据提示返回不同的值,以使对象的行为类似于字符串和数字:
var str = {
[Symbol.toPrimitive]: (hint) => {
if (hint === 'number') return 111;
return 'example';
}
};
console.log(`${str}`); // 'example'
console.log(str * 10); // 1110
关于javascript - 如何创建具有自定义内部插槽的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51888007/