Javascript 为什么我不能将Symbol.hasInstance分配给函数?
我有以下代码:Javascript 为什么我不能将Symbol.hasInstance分配给函数?,javascript,symbols,Javascript,Symbols,我有以下代码: function A() { } A[Symbol.hasInstance] = function(i) {return true} 在my Webpack+Babel环境中出现错误,导致失败: Uncaught TypeError: Cannot assign to read only property 'Symbol(Symbol.hasInstance)' of function 'function A() {}' 为什么?原因是Function.prototype[
function A() {
}
A[Symbol.hasInstance] = function(i) {return true}
在my Webpack+Babel环境中出现错误,导致失败:
Uncaught TypeError: Cannot assign to read only property 'Symbol(Symbol.hasInstance)' of function 'function A() {}'
为什么?原因是
Function.prototype[Symbol.hasInstance]
的属性描述符具有{writable:false}
,这使得无法以这种方式分配。JS引擎查找Function.prototype[Symbol.hasInstance]
描述符,查看writable:false
,然后禁止赋值,即使是在原型类型的叶对象上而不是在找到属性的原始对象上赋值,或者换句话说,writable:false
属性是原型继承的,即使该属性在我们试图赋值的原型链的最叶对象上还不存在
为了解决这个问题,我们可以使用Object.defineProperty
,它可以很好地工作:
function A() {
}
Object.defineProperty(A, Symbol.hasInstance, {
value: function(i) {return true}
})
相关:它看起来像是
Symbol。hasInstance
现在除了Firefox 50之外没有在任何东西中实现。@naomikSymbol.hasInstance
似乎是在Chrome中实现的(我在Chrome stable v51上)。我可以在控制台上看到它<代码>函数A(){};[Symbol.hasInstance]=function(){}在控制台中工作。也许这是网页/巴别塔透明的问题?