merge
شیءها را درهم میآمیزد و ویژگیهای شیء دوم را به شیء نخست مینویسد.
API
merge
بازگشت
| آرگومان | توضیح | نوع |
|---|---|---|
Object | شیء درهمآمیخته (همان شیء نخست) | Object |
پارامترها
| پارامتر | توضیح | نوع | پیشفرض |
|---|---|---|---|
a | شیء مقصد (دگرگون میشود) | Object | الزامی |
b | شیء مبدأ (ویژگیهایش به a نوشته میشود) | Object | اختیاری |
نمونه
کاربرد پایه
js
import { merge } from 'ranuts';
const obj1 = { a: 1, b: 2 };
const obj2 = { b: 3, c: 4 };
const result = merge(obj1, obj2);
console.log(result); // { a: 1, b: 3, c: 4 }
console.log(obj1); // { a: 1, b: 3, c: 4 } (شیء اصلی دگرگون شد)
console.log(result === obj1); // true (همان شیء اصلی برمیگردد)درهمآمیختن شیءهای پیکربندی
js
import { merge } from 'ranuts';
const defaultConfig = {
host: 'localhost',
port: 3000,
timeout: 5000,
};
const userConfig = {
port: 8080,
ssl: true,
};
const config = merge(defaultConfig, userConfig);
console.log(config);
// { host: 'localhost', port: 8080, timeout: 5000, ssl: true }دادن تنها یک آرگومان
js
import { merge } from 'ranuts';
const obj = { a: 1 };
const result = merge(obj);
console.log(result); // { a: 1 } (همانطور برمیگردد)یادداشتها
- شیء اصلی را دگرگون میکند: بهجای ساختن شیئی تازه، شیء نخست را مستقیم تغییر میدهد.
- آمیختن سطحی: تنها یک لایه را میآمیزد و به شیءهای تودرتو فرو نمیرود.
- رونویسی: اگر هر دو کلیدی یکسان داشته باشند، مقدار شیء دوم روی مقدار شیء نخست را مینویسد.
- مقدار بازگشتی: همان شیء نخست، در حالی که دگرگون شده است.
mergeExports
با آنکه نامش شبیه است، ابزاری دیگر است: بهجای رونوشت گرفتن از مقدارهای ساده، از نقشهای از گیرندهها یک شیء برونداد تنبلارزیاب و منجمد میسازد. هر گیرنده دستبالا یک بار، در نخستین دسترسی، میدود و از آن پس نتیجه انباره میشود؛ آن هم با همان پوشش once که ranuts/utils جداگانه بیرون میدهد. شیءهای سادهٔ تودرتو بازگشتی درهم آمیخته (و منجمد) میشوند؛ هر چه گیرنده یا شیء تودرتو نباشد خطا میدهد.
js
import { mergeExports } from 'ranuts/utils';
const lazyModule = mergeExports(
{},
{
get expensive() {
console.log('computing...');
return heavyComputation();
},
nested: {
get value() {
return 42;
},
},
},
);
lazyModule.expensive; // 'computing...' را چاپ میکند و سپس نتیجه را میدهد
lazyModule.expensive; // نتیجهٔ انبارهشده را میدهد و دیگر چیزی چاپ نمیکندNotes
- آمیختنی همهکاره نیست. برای مقدارهای ساده از
mergeاستفاده کنید؛mergeExportsبرای ساختن شیئی به شکل یک پیمانه است که در آن محاسبهٔ برخی ویژگیها گران است و تنها اگر واقعاً خوانده شوند باید بدود. - نتیجه منجمد است (
Object.freeze) و هر ویژگیِ تعریفشدهconfigurable: falseاست، پس شیء بازگشتی را نه میتوان دوباره نسبت داد و نه ویژگی تازهای به آن افزود. - هر چیز دیگری خطا میدهد. مقداری که نه گیرنده باشد و نه شیء سادهٔ تودرتو (آرایه، تابع، مقدار اولیهای که مستقیم نسبت داده شده) خطای
Exposed values must be either a getter or a nested objectمیدهد.