gpt4 book ai didi

javascript - 无法从绑定(bind)函数访问对象变量,或从未绑定(bind)函数访问内部方法

转载 作者:搜寻专家 更新时间:2023-10-31 23:57:19 25 4
gpt4 key购买 nike

仅供引用,我正在尝试关注 Abstract Encoding规范。本质上,我想创建一个“函数变量”let foo = codec.encode,其中 encode() 调用 codec 中的另一个函数,并且我可以访问 foo.bytes。似乎我可以访问 bytes 的值但不能访问内部函数 this.encodingLength(),或者创建一个绑定(bind)函数变量并具有完全相反的功能发生。仅当我将函数 encode() 分配给变量时才会出现此问题。我在某处读到 bind() 创建了一个包装函数(它将无法访问 bytes,而且对象函数如果不访问则无法访问其他对象函数没有正确的上下文。是否有可能同时拥有两个世界?

示例代码:

const codec = {
encode: function encode () {
encode.bytes = 2
this.encodingLength()
},
encodingLength: function encodingLength () { }
}

let foo = codec.encode
let bar = codec.encode.bind(codec)

> foo()
TypeError: this.encodingLength is not a function
at encode (repl:4:6)
> foo.bytes
2

> bar()
undefined
> bar.bytes
undefined

同样使用this.encode.bytes似乎没有什么区别

const codec = {
encode () {
this.encode.bytes = 2
this.encodingLength()
},
encodingLength () { }
}

最佳答案

这对你有用吗?

// define encodingLength function here
function encodingLength(object) {
// determine encoding length of obj here
return 5; // dummy value
}

const codec = {
encode: function encode(object, buffer, offset) {
// encode object here
// capture `encodingLength` in a closure
encode.bytes = encodingLength(object); // dummy value
return []; // dummy empty "buffer"
},
decode: function decode(buffer, start, end) {
// decode buffer here
decode.bytes = 12; // another dummy value
return {}; // dummy "decoded" object
},
encodingLength: encodingLength
};

let foo = codec.encode;
foo();
console.log(foo.bytes); // 5, as expected
console.log(codec.encode.bytes); // 5, as expected

let bar = codec.decode;
bar();
console.log(bar.bytes); // 12, as expected
console.log(codec.decode.bytes); // 12, as expected

关于javascript - 无法从绑定(bind)函数访问对象变量,或从未绑定(bind)函数访问内部方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51489300/

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