gpt4 book ai didi

javascript - 绑定(bind)一个类会失去它的静态属性

转载 作者:行者123 更新时间:2023-12-01 02:20:00 26 4
gpt4 key购买 nike

给定

class someClass {
constructor (str) {
console.log('created', str);
}
static someStatic() {
}
}

我们能做到

const someBoundClass = someClass.bind(someClass, 'xxx');
const a = new someBoundClass(); // logs 'created xxx'
console.log(someClass.someStatic) // logs someStatic () {}
console.log(someBoundClass.someStatic) // logs undefined

幕后发生了什么导致我无法访问绑定(bind)类上的静态属性?有没有办法既能达到想要的绑定(bind)效果又不丢失静态方法?

最佳答案

好吧,bind 创建了一个新的函数对象,所以我不确定为什么您会期望它具有相同的静态属性。请记住,ES6 class 主要是语法糖:

function someClass(str) {
if (!new.target) throw "constructor must be called with new";
console.log('created', str);
}
someClass.someStatic = function() {};

var someBoundClass = someClass.bind(null, 'xxx');
console.log(someBoundClass === someClass) // false, of course

作为解决方法,您可以使用子类化:

class someBoundClass extends someClass { constructor(...args) { super('xxx', ...args); }}
const a = new someBoundClass(); // logs 'created xxx'
console.log(someClass.someStatic) // logs someStatic () {}
console.log(someBoundClass.someStatic) // logs someStatic () {}

这里的someBoundClass继承了someClass的静态属性。

关于javascript - 绑定(bind)一个类会失去它的静态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49267316/

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