gpt4 book ai didi

javascript - 为什么我不能将 Symbol.hasInstance 分配给函数?

转载 作者:行者123 更新时间:2023-12-02 14:16:41 26 4
gpt4 key购买 nike

我有以下代码:

function A() {
}

A[Symbol.hasInstance] = function(i) {return true}

它在我的 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,然后禁止赋值,即使它是在叶子对象上赋值的原型(prototype)类型而不是在找到该属性的原始对象上,或者换句话说,即使该属性尚未存在于最叶对象上,writable: false 属性也会被原型(prototype)继承。我们尝试分配值的原型(prototype)链。

为了解决这个问题,我们可以使用Object.defineProperty,它工作得很好:

function A() {
}

Object.defineProperty(A, Symbol.hasInstance, {
value: function(i) {return true}
})

关于javascript - 为什么我不能将 Symbol.hasInstance 分配给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38963975/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com