pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/javascript-tutorial/fa.javascript.info/pull/170.patch

get/set` methods) or a data property (has a `value`), not both. +لطفا در نظر داشته باشید که یک ویژگی یا می‌تواند دسترسی باشد (دارای متدهای `get/set` است) یا یک ویژگی داده‌ای (یک `value` دارد)، نه هر دو. -If we try to supply both `get` and `value` in the same descriptor, there will be an error: +اگر ما تلاش کنیم که هم `get` و هم `value` را داخل یک توصیف‌کننده قرار دهیم، ارور ایجاد می‌شود: ```js run *!* -// Error: Invalid property descriptor. +// ارور: توصیف‌کننده غیر قابل قبول ویژگی */!* Object.defineProperty({}, 'prop', { get() { From c10e888d62977443b59db8c8c4d1cdcbcd4daac5 Mon Sep 17 00:00:00 2001 From: MaHdi Date: Wed, 10 Nov 2021 12:59:33 +0330 Subject: [PATCH 4/8] Add some words in the beginning of lines: 107 to 110 The lines 107 to 110 were started from left, because there were English words in the beginning, and they didn't look nice. I added Persian words in the beginning, so the lines start from right. --- .../07-object-properties/02-property-accessors/article.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/1-js/07-object-properties/02-property-accessors/article.md b/1-js/07-object-properties/02-property-accessors/article.md index f3965d897..60d11ec5f 100644 --- a/1-js/07-object-properties/02-property-accessors/article.md +++ b/1-js/07-object-properties/02-property-accessors/article.md @@ -104,10 +104,10 @@ alert(user.surname); // Cooper یعنی اینکه یک توصیف‌کننده دسترسی ممکن است این‌ها را داشته باشد: -- **`get`** -- تابعی بدون آرگومان، زمانی که ویژگی‌ای خوانده شود کار می‌کند، -- **`set`** -- تابعی با یک آرگومان، زمانی که ویژگی تنظیم می‌شود فراخوانی می‌شود، -- **`enumerable`** -- مشابه به ویژگی‌های داده‌ای، -- **`configurable`** -- مشابه به ویژگی‌های داده‌ای، +- متد **`get`** -- تابعی بدون آرگومان، زمانی که ویژگی‌ای خوانده شود کار می‌کند، +- متد **`set`** -- تابعی با یک آرگومان، زمانی که ویژگی تنظیم می‌شود فراخوانی می‌شود، +- ویژگی **`enumerable`** -- مشابه به ویژگی‌های داده‌ای، +- ویژگی **`configurable`** -- مشابه به ویژگی‌های داده‌ای، برای مثال، برای ایجاد دسترسی `fullName` با استفاده از `defineProperty`، می‌توانیم توصیف‌کننده‌ای شامل `get` و `set` قرار دهیم: From c6766c63c6bb5dbf23db4effd4da59ad1e31dd07 Mon Sep 17 00:00:00 2001 From: MaHdi Date: Thu, 11 Nov 2021 13:50:22 +0330 Subject: [PATCH 5/8] Translate a part of article --- .../02-property-accessors/article.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/1-js/07-object-properties/02-property-accessors/article.md b/1-js/07-object-properties/02-property-accessors/article.md index 60d11ec5f..1755f84df 100644 --- a/1-js/07-object-properties/02-property-accessors/article.md +++ b/1-js/07-object-properties/02-property-accessors/article.md @@ -151,11 +151,11 @@ Object.defineProperty({}, 'prop', { }); ``` -## Smarter getters/setters +## گیرنده/تنظیم‌کننده‌های هوشمندتر -Getters/setters can be used as wrappers over "real" property values to gain more control over operations with them. +گیرنده‌ها/تنظیم‌کننده‌ها می‌توانند به عنوان دربرگیرنده برای مقدار ویژگی‎های «واقعی» استفاده شوند تا کنترل بیشتری بر روی عملیات با آن‌ها داشته باشیم. -For instance, if we want to forbid too short names for `user`, we can have a setter `name` and keep the value in a separate property `_name`: +برای مثال، اگر ما بخواهیم اسم‌های خیلی کوتاه‌ها را برای `user` ممنوع کنیم، می‌توانیم یک تنظیم‌کننده `name` داشته باشیم و مقدار را درون ویژگی جداگانه‌ی `_name` ذخیره کنیم: ```js run let user = { @@ -165,7 +165,7 @@ let user = { set name(value) { if (value.length < 4) { - alert("Name is too short, need at least 4 characters"); + alert("اسم خیلی کوتاه است، حداقل به 4 کاراکتر نیاز دارد"); return; } this._name = value; @@ -175,12 +175,12 @@ let user = { user.name = "Pete"; alert(user.name); // Pete -user.name = ""; // Name is too short... +user.name = ""; // ...اسم خیلی کوتاه است ``` -So, the name is stored in `_name` property, and the access is done via getter and setter. +پس اسم در ویژگی `_name` ذخیره شده است و دسترسی گرفتن توسط گیرنده و تنظیم‌کننده انجام می‌گیرد. -Technically, external code is able to access the name directly by using `user._name`. But there is a widely known convention that properties starting with an underscore `"_"` are internal and should not be touched from outside the object. +از لحاظ فنی، کد بیرونی می‌تواند به صورت مستقیم با استفاده از `user._name` به اسم دسترسی پیدا کند. اما یک قرارداد شناخته شده وجود دارد که ویژگی‌هایی که با یک زیرخط (underscore) `"_"` شروع می‌شوند، داخلی هستند و نباید بیرون از شیء به آن‌ها کاری داشت. ## Using for compatibility From 72cf053ce2415852740d901438d0be418f57d76c Mon Sep 17 00:00:00 2001 From: MaHdi Date: Thu, 11 Nov 2021 14:10:34 +0330 Subject: [PATCH 6/8] Typo --- 1-js/07-object-properties/02-property-accessors/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/07-object-properties/02-property-accessors/article.md b/1-js/07-object-properties/02-property-accessors/article.md index 1755f84df..0e895e68b 100644 --- a/1-js/07-object-properties/02-property-accessors/article.md +++ b/1-js/07-object-properties/02-property-accessors/article.md @@ -153,7 +153,7 @@ Object.defineProperty({}, 'prop', { ## گیرنده/تنظیم‌کننده‌های هوشمندتر -گیرنده‌ها/تنظیم‌کننده‌ها می‌توانند به عنوان دربرگیرنده برای مقدار ویژگی‎های «واقعی» استفاده شوند تا کنترل بیشتری بر روی عملیات با آن‌ها داشته باشیم. +گیرنده‌ها/تنظیم‌کننده‌ها می‌توانند به عنوان دربرگیرنده برای مقدار ویژگی‌های «واقعی» استفاده شوند تا کنترل بیشتری بر روی عملیات با آن‌ها داشته باشیم. برای مثال، اگر ما بخواهیم اسم‌های خیلی کوتاه‌ها را برای `user` ممنوع کنیم، می‌توانیم یک تنظیم‌کننده `name` داشته باشیم و مقدار را درون ویژگی جداگانه‌ی `_name` ذخیره کنیم: From 8d89f69fd22822b48e8ba5a9b4b60f7d4e0c8787 Mon Sep 17 00:00:00 2001 From: MaHdi Date: Thu, 11 Nov 2021 16:59:27 +0330 Subject: [PATCH 7/8] Translate article Line 188 needs more attention --- .../02-property-accessors/article.md | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/1-js/07-object-properties/02-property-accessors/article.md b/1-js/07-object-properties/02-property-accessors/article.md index 0e895e68b..e292b36ee 100644 --- a/1-js/07-object-properties/02-property-accessors/article.md +++ b/1-js/07-object-properties/02-property-accessors/article.md @@ -183,11 +183,11 @@ user.name = ""; // ...اسم خیلی کوتاه است از لحاظ فنی، کد بیرونی می‌تواند به صورت مستقیم با استفاده از `user._name` به اسم دسترسی پیدا کند. اما یک قرارداد شناخته شده وجود دارد که ویژگی‌هایی که با یک زیرخط (underscore) `"_"` شروع می‌شوند، داخلی هستند و نباید بیرون از شیء به آن‌ها کاری داشت. -## Using for compatibility +## استفاده برای سازگاری -One of the great uses of accessors is that they allow to take control over a "regular" data property at any moment by replacing it with a getter and a setter and tweak its behavior. +یکی از بهترین کاربردهای دسترسی‌ها این است که آن‌ها به ما اجازه می‌دهند که در هر زمان یک ویژگی داده‌ای «معمولی» را از طریق جایگزین کردن آن با یک گیرنده و یک تنظیم‌کننده کنترل کنیم و رفتار آن را تغییر دهیم. -Imagine we started implementing user objects using data properties `name` and `age`: +تصور کنید که ما شروع به پیاده‌سازی شیءهایی مربوط به کاربران کردیم که شامل ویژگی‌های داده‌ای `name` و `age` هستند: ```js function User(name, age) { @@ -200,7 +200,7 @@ let john = new User("John", 25); alert( john.age ); // 25 ``` -...But sooner or later, things may change. Instead of `age` we may decide to store `birthday`, because it's more precise and convenient: +...اما دیر یا زور، همه چیز ممکن است تغییر کند. به جای `age` ممکن است تصمیم بگیریم که `birthday` را ذخیره کنیم چون دقیق‌تر و مناسب‌تر است: ```js function User(name, birthday) { @@ -211,13 +211,13 @@ function User(name, birthday) { let john = new User("John", new Date(1992, 6, 1)); ``` -Now what to do with the old code that still uses `age` property? +حالا با کد قدیمی که هنوز هم از ویژگی `age` استفاده می‌کند چه کار کنیم؟ -We can try to find all such places and fix them, but that takes time and can be hard to do if that code is used by many other people. And besides, `age` is a nice thing to have in `user`, right? +می‌توانیم چنین جاهایی را در کد پیدا و آن‌ها را درست کنیم اما این کار زمان‌بر است و اگر آن کد توسط افراد دیگری در حال استفاده باشد ممکن است این کار سخت شود. و همچنین، `age` چیز خوبی است که در `user` داشته باشیم نه؟ -Let's keep it. +بیایید آن را نگه داریم. -Adding a getter for `age` solves the problem: +اضافه کردن یک گیرنده برای `age` مشکل را حل می‌کند: ```js run no-beautify function User(name, birthday) { @@ -225,7 +225,7 @@ function User(name, birthday) { this.birthday = birthday; *!* - // age is calculated from the current date and birthday + // از تاریخ کنونی و تاریخ تولد محاسبه می‌شود age Object.defineProperty(this, "age", { get() { let todayYear = new Date().getFullYear(); @@ -237,8 +237,8 @@ function User(name, birthday) { let john = new User("John", new Date(1992, 6, 1)); -alert( john.birthday ); // birthday is available -alert( john.age ); // ...as well as the age +alert( john.birthday ); // قابل دسترس است birthday +alert( john.age ); // age درست مانند... ``` -Now the old code works too and we've got a nice additional property. +حالا کد قدیمی هم کار می‌کند و ما یک ویژگی اضافی خوب گرفتیم. From 99c06bf48804a96b3403eabcd16d2cddf9d9f934 Mon Sep 17 00:00:00 2001 From: MaHdi Date: Thu, 11 Nov 2021 22:50:24 +0330 Subject: [PATCH 8/8] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Mahdyar Hasanpour Replaced «گیرنده» with "getter" Replaced «تنظیم‌کننده» with "setter" Replaced «دسترسی» with «اکسسر» And some small changes: - Fixed a typo in line 203 - Also changed a word in lines 108 and 143 --- .../02-property-accessors/article.md | 54 +++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/1-js/07-object-properties/02-property-accessors/article.md b/1-js/07-object-properties/02-property-accessors/article.md index e292b36ee..2a2d971bb 100644 --- a/1-js/07-object-properties/02-property-accessors/article.md +++ b/1-js/07-object-properties/02-property-accessors/article.md @@ -1,29 +1,29 @@ -# گیرنده و تنظیم‌کننده‌های ویژگی +# متدهای getter و setter ویژگی ویژگی‌های شیء دو نوع هستند. نوع اول *ویژگی‌های داده‌ای* هستند. ما از قبل می‌دانیم چگونه با آن‌ها کار کنیم. تمام ویژگی‌هایی که تا حالا استفاده می‌کردیم ویژگی‌های داده‌ای بودند. -نوع دوم ویژگی‌ها چیزی جدید است. این نوع *ویژگی‌های دسترسی* است. اساسا آن‌ها تابع‌هایی هستند که برای گرفتن و تنظیم‌کردن مقداری اجرا می‌شوند اما برای یک شیء خارجی مانند ویژگی‌های معمولی به نظر می‌رسند. +نوع دوم ویژگی‌ها چیزی جدید است. این نوع *ویژگی‌های اکسسر(accessor)* است. اساسا آن‌ها تابع‌هایی هستند که برای گرفتن و تنظیم‌کردن مقداری اجرا می‌شوند اما برای یک شیء خارجی مانند ویژگی‌های معمولی به نظر می‌رسند. -## گیرنده‌ها و تنظیم‌کننده‌ها +## متدهای getter و setter -ویژگی‌های دسترسی توسط متدهای «گیرنده(getter)» و «تنظیم‌کننده(setter)» نمایش داده می‌شوند. در یک شیء لیترال، این متدها با `get` و `set` مشخص می‌شوند. +ویژگی‌های اکسسر توسط متدهای "getter" و "setter" نمایش داده می‌شوند. در یک شیء لیترال، این متدها با `get` و `set` مشخص می‌شوند. ```js let obj = { *!*get propName()*/!* { - // اجرا می‌شود obj.propName گیرنده، کد آن برای دریافت + // اجرا می‌شود obj.propName کد آن برای دریافت ،getter }, *!*set propName(value)*/!* { - // اجرا می‌شود obj.propName = value تنظیم‌کننده، کد آن برای تنظیم + // اجرا می‌شود obj.propName = value کد آن برای تنظیم ،setter } }; ``` -گیرنده زمانی که `obj.propName` خوانده می‌شود کار می‌کند؛ تنظیم‌کننده زمانی که این ویژگی مقداردهی می‌شود. +متد getter زمانی که `obj.propName` خوانده می‌شود کار می‌کند؛ متد setter زمانی که این ویژگی مقداردهی می‌شود. برای مثال، ما یک شیء `user` حاوی `name` و `surname` داریم: @@ -34,7 +34,7 @@ let user = { }; ``` -حالا می‌خواهیم یک ویژگی `fullName` اضافه کنیم که باید `"John Smith"` باشد. قطعا، نمی‌توانیم اطلاعات موجود را کپی‌پِیست کنیم پس آن را به عنوان یک دسترسی پیاده‌سازی کنیم: +حالا می‌خواهیم یک ویژگی `fullName` اضافه کنیم که باید `"John Smith"` باشد. قطعا، نمی‌توانیم اطلاعات موجود را کپی‌پِیست کنیم پس می‌توانیم آن را به عنوان یک اکسسر پیاده‌سازی کنیم: ```js run let user = { @@ -53,9 +53,9 @@ alert(user.fullName); // John Smith */!* ``` -از بیرون، یک ویژگی دسترسی مانند ویژگی‌ای معمولی به نظر می‌رسد. این ایده‌ی ویژگی‌های دسترسی است. ما `user.fullName` را به عنوان یک تابع *فراخوانی* نمی‌کنیم بلکه آن را به صورت عادی *دریافت* می‌کنیم: +از بیرون، یک ویژگی اکسسر مانند ویژگی‌ای معمولی به نظر می‌رسد. این ایده‌ی ویژگی‌های اکسسر است. ما `user.fullName` را به عنوان یک تابع *فراخوانی* نمی‌کنیم بلکه آن را به صورت عادی *دریافت* می‌کنیم: -از حالا به بعد، `fullName` فقط یک گیرنده دارد. اگر ما بخواهیم `user.fullName` را مقداردهی کنیم، ارور ایجاد می‌شود: +از حالا به بعد، `fullName` فقط یک getter دارد. اگر ما بخواهیم `user.fullName` را مقداردهی کنیم، ارور ایجاد می‌شود: ```js run let user = { @@ -65,11 +65,11 @@ let user = { }; *!* -user.fullName = "Test"; // ارور (ویژگی فقط گیرنده دارد) +user.fullName = "Test"; // (دارد getter ویژگی فقط) ارور */!* ``` -بیایید با اضافه کردن تنظیم‌کننده برای `user.fullName` این مشکل را برطرف کنیم: +بیایید با اضافه کردن setter برای `user.fullName` این مشکل را برطرف کنیم: ```js run let user = { @@ -96,20 +96,20 @@ alert(user.surname); // Cooper در نتیجه، ما یک ویژگی «مجازیِ» `fullName` داریم. هم قابل خواندن است و هم قابل نوشتن. -## توصیف‌کننده‌های دسترسی +## توصیف‌کننده‌های اکسسر -توصیف‌کننده‌های ویژگی‌های دسترسی نسبت به توصیف‌کننده‌های ویژگی‌های داده‌ای تفاوت دارند. +توصیف‌کننده‌های ویژگی‌های اکسسز نسبت به توصیف‌کننده‌های ویژگی‌های داده‌ای تفاوت دارند. -برای ویژگی‌های دسترسی، `value` یا `writable` وجود ندارد اما به جای آن‌ها تابع‌های `get` و `set` وجود دارد. +برای ویژگی‌های اکسسر، `value` یا `writable` وجود ندارد اما به جای آن‌ها تابع‌های `get` و `set` وجود دارد. -یعنی اینکه یک توصیف‌کننده دسترسی ممکن است این‌ها را داشته باشد: +یعنی اینکه یک توصیف‌کننده اکسسز ممکن است این‌ها را داشته باشد: - متد **`get`** -- تابعی بدون آرگومان، زمانی که ویژگی‌ای خوانده شود کار می‌کند، -- متد **`set`** -- تابعی با یک آرگومان، زمانی که ویژگی تنظیم می‌شود فراخوانی می‌شود، +- متد **`set`** -- تابعی با یک آرگومان، زمانی که ویژگی مقداردهی می‌شود فراخوانی می‌شود، - ویژگی **`enumerable`** -- مشابه به ویژگی‌های داده‌ای، - ویژگی **`configurable`** -- مشابه به ویژگی‌های داده‌ای، -برای مثال، برای ایجاد دسترسی `fullName` با استفاده از `defineProperty`، می‌توانیم توصیف‌کننده‌ای شامل `get` و `set` قرار دهیم: +برای مثال، برای ایجاد اکسسر `fullName` با استفاده از `defineProperty`، می‌توانیم توصیف‌کننده‌ای شامل `get` و `set` قرار دهیم: ```js run let user = { @@ -134,13 +134,13 @@ alert(user.fullName); // John Smith for(let key in user) alert(key); // name, surname ``` -لطفا در نظر داشته باشید که یک ویژگی یا می‌تواند دسترسی باشد (دارای متدهای `get/set` است) یا یک ویژگی داده‌ای (یک `value` دارد)، نه هر دو. +لطفا در نظر داشته باشید که یک ویژگی یا می‌تواند اکسسر باشد (دارای متدهای `get/set` است) یا یک ویژگی داده‌ای (یک `value` دارد)، نه هر دو. اگر ما تلاش کنیم که هم `get` و هم `value` را داخل یک توصیف‌کننده قرار دهیم، ارور ایجاد می‌شود: ```js run *!* -// ارور: توصیف‌کننده غیر قابل قبول ویژگی +// ارور: توصیف‌کننده‌ی غیر قابل قبول ویژگی */!* Object.defineProperty({}, 'prop', { get() { @@ -151,11 +151,11 @@ Object.defineProperty({}, 'prop', { }); ``` -## گیرنده/تنظیم‌کننده‌های هوشمندتر +## متدهای getter/setter هوشمندتر -گیرنده‌ها/تنظیم‌کننده‌ها می‌توانند به عنوان دربرگیرنده برای مقدار ویژگی‌های «واقعی» استفاده شوند تا کنترل بیشتری بر روی عملیات با آن‌ها داشته باشیم. +متدهای getter/setter می‌توانند به عنوان دربرگیرنده برای مقدار ویژگی‌های «واقعی» استفاده شوند تا کنترل بیشتری بر روی عملیات با آن‌ها داشته باشیم. -برای مثال، اگر ما بخواهیم اسم‌های خیلی کوتاه‌ها را برای `user` ممنوع کنیم، می‌توانیم یک تنظیم‌کننده `name` داشته باشیم و مقدار را درون ویژگی جداگانه‌ی `_name` ذخیره کنیم: +برای مثال، اگر ما بخواهیم اسم‌های خیلی کوتاه‌ها را برای `user` ممنوع کنیم، می‌توانیم یک setter `name` داشته باشیم و مقدار را درون ویژگی جداگانه‌ی `_name` ذخیره کنیم: ```js run let user = { @@ -178,14 +178,14 @@ alert(user.name); // Pete user.name = ""; // ...اسم خیلی کوتاه است ``` -پس اسم در ویژگی `_name` ذخیره شده است و دسترسی گرفتن توسط گیرنده و تنظیم‌کننده انجام می‌گیرد. +پس اسم در ویژگی `_name` ذخیره شده است و دسترسی گرفتن توسط getter و setter انجام می‌گیرد. از لحاظ فنی، کد بیرونی می‌تواند به صورت مستقیم با استفاده از `user._name` به اسم دسترسی پیدا کند. اما یک قرارداد شناخته شده وجود دارد که ویژگی‌هایی که با یک زیرخط (underscore) `"_"` شروع می‌شوند، داخلی هستند و نباید بیرون از شیء به آن‌ها کاری داشت. ## استفاده برای سازگاری -یکی از بهترین کاربردهای دسترسی‌ها این است که آن‌ها به ما اجازه می‌دهند که در هر زمان یک ویژگی داده‌ای «معمولی» را از طریق جایگزین کردن آن با یک گیرنده و یک تنظیم‌کننده کنترل کنیم و رفتار آن را تغییر دهیم. +یکی از بهترین کاربردهای اکسسرها این است که آن‌ها به ما اجازه می‌دهند که در هر زمان یک ویژگی داده‌ای «معمولی» را از طریق جایگزین کردن آن با یک getter و یک setter کنترل کنیم و رفتار آن را تغییر دهیم. تصور کنید که ما شروع به پیاده‌سازی شیءهایی مربوط به کاربران کردیم که شامل ویژگی‌های داده‌ای `name` و `age` هستند: @@ -200,7 +200,7 @@ let john = new User("John", 25); alert( john.age ); // 25 ``` -...اما دیر یا زور، همه چیز ممکن است تغییر کند. به جای `age` ممکن است تصمیم بگیریم که `birthday` را ذخیره کنیم چون دقیق‌تر و مناسب‌تر است: +...اما دیر یا زود، همه چیز ممکن است تغییر کند. به جای `age` ممکن است تصمیم بگیریم که `birthday` را ذخیره کنیم چون دقیق‌تر و مناسب‌تر است: ```js function User(name, birthday) { @@ -217,7 +217,7 @@ let john = new User("John", new Date(1992, 6, 1)); بیایید آن را نگه داریم. -اضافه کردن یک گیرنده برای `age` مشکل را حل می‌کند: +اضافه کردن یک getter برای `age` مشکل را حل می‌کند: ```js run no-beautify function User(name, birthday) { pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy