Object.assign(fn, {x: () => {}, y: () => {}})是什么意思?



让我有一个定义如下的函数,

const crypto = require('crypto');
const fs = require('fs/promises');
const calculateHash = cache({ ttl: 5, size: 100 }, async file_path => {
const buffer = await fs.readFile(file_path);
return crypto.createHash('sha256').update(buffer).digest('base64');
});
const cache = (options, fn) => {
return Object.assign(fn, {
cache_size: () => {
return 0;
},
clear_cache: () => {
// clear_cache is not implemented
},
});
};

当我执行console.log(calculateHash())时,它会记录为,

[AsyncFunction (anonymous)] {
cache_size: [Function: cache_size],
clear_cache: [Function: clear_cache]
}

当我这样做的时候,

async function run() {
const cache1 = await calculateHash('./fileToCache.js');
console.log(cache1)
}
run()
.then(() => console.log('done'))
.catch(e => console.error(e));

它实际上调用了async函数。

EB26xyw+zvLiccSc9Y3ZPDP0qqpBnNQsXdwyIFk8wPY=
done

它在这里是如何工作的

当我执行Object.assign(obj1, obj2)时,它将合并它们;如果属性相同,它将被覆盖

所以,我认为这里Object.assign()创建了一个最终对象,如下

{
[AsyncFunction (anonymous)],
cache_size: [Function: cache_size],
clear_cache: [Function: clear_cache]
}

但是在调用calculateHash()时,它如何知道调用第一个属性

函数对象,Object.assign对其第一个参数进行变异并返回:

const foo = {};
const bar = Object.assign(foo, { hi: 5 });
foo.hi; // 5
bar.hi; // 5
foo === bar; // true, foo and bar are the *same* object

如果你做

const add3 = Object.assign(function(n) { return n + 3 }, { someValue: 42 });
add3(5); // 8
add3.someValue; // 42

那么CCD_ 6仍然是一个函数。控制台显示的内容让你误入歧途,异步匿名函数不是结果对象的属性,它是结果对象的属性,并添加了一些内容;属性";在方括号中,并且没有与其关联的名称

最新更新