From be2ee58181bf4d342741bef2786a6692721c7619 Mon Sep 17 00:00:00 2001 From: AmirhosseinVeysi Date: Wed, 24 Nov 2021 23:27:14 +0330 Subject: [PATCH 1/9] Translated article --- 1-js/09-classes/01-class/article.md | 236 ++++++++++++++-------------- 1 file changed, 119 insertions(+), 117 deletions(-) diff --git a/1-js/09-classes/01-class/article.md b/1-js/09-classes/01-class/article.md index d19b9ca9a..cbf773567 100644 --- a/1-js/09-classes/01-class/article.md +++ b/1-js/09-classes/01-class/article.md @@ -1,22 +1,22 @@ -# Class basic syntax +# سینتکس پایه کلاس -```quote author="Wikipedia" -In object-oriented programming, a *class* is an extensible program-code-template for creating objects, providing initial values for state (member variables) and implementations of behavior (member functions or methods). +```quote author="ویکی پدیا" +در برنامه‌نویسی شیء‌گرا، *کلاس* یک الگوی-کد-برنامه قابل توسعه برای ایجاد اشیاء، ارائه مقادیر اولیه برای حالت (متغیرهای عضو) و پیاده‌سازی رفتار (توابع یا روش‌های عضو) است. ``` -In practice, we often need to create many objects of the same kind, like users, or goods or whatever. +در عمل، ما اغلب نیاز به ایجاد بسیاری از اشیاء از یک نوع، مانند کاربران، یا کالاها یا هر چیز دیگری داریم. -As we already know from the chapter , `new function` can help with that. +همانطور که قبلاً از فصل می‌دانیم، `new function` می‌تواند در این مورد کمک کند. -But in the modern JavaScript, there's a more advanced "class" construct, that introduces great new features which are useful for object-oriented programming. +اما در جاوا‌اسکریپت مدرن، ساختار «کلاس» پیشرفته‌تری وجود دارد که ویژگی‌های جدید بسیار خوبی را معرفی می‌کند که برای برنامه‌نویسی شیء‌گرا مفید هستند. -## The "class" syntax +## سینتکس «کلاس» -The basic syntax is: +سینتکس پایه اینگونه است: ```js class MyClass { - // class methods + // متد‌های کلاس constructor() { ... } method1() { ... } method2() { ... } @@ -25,11 +25,11 @@ class MyClass { } ``` -Then use `new MyClass()` to create a new object with all the listed methods. +سپس از `new MyClass()` برای ایجاد یک شیء جدید با تمام متدهای فهرست شده استفاده کنید. -The `constructor()` method is called automatically by `new`, so we can initialize the object there. +متد `constructor()` به طور خودکار توسط `new` فراخوانی می‌شود، بنابراین می‌توانیم شیء را در آنجا مقداردهی اولیه کنیم. -For example: +برای مثال: ```js run class User { @@ -50,27 +50,29 @@ user.sayHi(); ``` When `new User("John")` is called: -1. A new object is created. -2. The `constructor` runs with the given argument and assigns it to `this.name`. +وقتی `new User("John")` فراخوانی می‌شود: +1. یک شیء جدید ایجاد می‌شود. +2. `constructor` با آرگومان داده شده اجرا می‌شود و آن را به `this.name` اختصاص می‌دهد. ...Then we can call object methods, such as `user.sayHi()`. +..سپس ما می‌توانیم متد‌های شیء را فراخوانی کنیم، مانند `user.sayHi()`. -```warn header="No comma between class methods" -A common pitfall for novice developers is to put a comma between class methods, which would result in a syntax error. +```warn header="بین متدهای کلاس کاما وجود ندارد" +یک مشکل رایج برای توسعه دهندگان تازه کار این است که یک کاما بین متدهای کلاس قرار می‌دهند که منجر به یک خطای سینتکس می‌شود. -The notation here is not to be confused with object literals. Within the class, no commas are required. +نماد در اینجا نباید با شیء لفظی اشتباه شود. در کلاس، نیازی به کاما نیست. ``` -## What is a class? +## یک کلاس چیست؟ -So, what exactly is a `class`? That's not an entirely new language-level entity, as one might think. +بنابراین، `class` دقیقاً چیست؟ این یک موجودیت کاملاً جدید در سطح زبان نیست، همانطور که ممکن است تصور شود. -Let's unveil any magic and see what a class really is. That'll help in understanding many complex aspects. +بیایید از هر جادویی رونمایی کنیم و ببینیم کلاس واقعاً چیست. این به درک بسیاری از جنبه‌های پیچیده کمک می‌کند. -In JavaScript, a class is a kind of function. +در جاوااسکریپت کلاس نوعی تابع است. -Here, take a look: +در اینجا، نگاهی بیندازیم: ```js run class User { @@ -78,24 +80,24 @@ class User { sayHi() { alert(this.name); } } -// proof: User is a function +// اثبات: کاربر یک تابع است *!* -alert(typeof User); // function +alert(typeof User); // تابع */!* ``` -What `class User {...}` construct really does is: +کاری که ساختار `class User {...}` واقعا انجام می‌دهد این است: -1. Creates a function named `User`, that becomes the result of the class declaration. The function code is taken from the `constructor` method (assumed empty if we don't write such method). -2. Stores class methods, such as `sayHi`, in `User.prototype`. +1. تابعی به نام `User` ایجاد می‌کند که نتیجه تعریف کلاس می‌شود. کد تابع از متد سازنده گرفته شده است (اگر چنین روشی را ننویسیم خالی فرض می‌شود). +2. متدهای کلاس، مانند `sayHi` را در `User.prototype` ذخیره می‌کند. -After `new User` object is created, when we call its method, it's taken from the prototype, just as described in the chapter . So the object has access to class methods. +پس از ایجاد شیء `new User`، وقتی متد آن را فراخوانی می‌کنیم، از نمونه اولیه گرفته می‌شود، درست همانطور که در فصل توضیح داده شد. بنابراین شیء به متدهای کلاس دسترسی دارد. -We can illustrate the result of `class User` declaration as: +ما می‌توانیم نتیجه تعریف `class User` را به صورت زیر نشان دهیم: ![](class-user.svg) -Here's the code to introspect it: +این کد برای درون‌یابی آن است: ```js run class User { @@ -103,34 +105,34 @@ class User { sayHi() { alert(this.name); } } -// class is a function -alert(typeof User); // function +// کلاس یک تابع است +alert(typeof User); // تابع -// ...or, more precisely, the constructor method +// ... یا به طور دقیق تر، متد سازنده alert(User === User.prototype.constructor); // true -// The methods are in User.prototype, e.g: -alert(User.prototype.sayHi); // the code of the sayHi method +// :هستند، به عنوان مثال User.prototype متدها در +alert(User.prototype.sayHi); // sayHi کد متد -// there are exactly two methods in the prototype -alert(Object.getOwnPropertyNames(User.prototype)); // constructor, sayHi +// دقیقا دو متد در پروتوتایپ وجود دارد +alert(Object.getOwnPropertyNames(User.prototype)); // sayHi ،سازنده ``` -## Not just a syntactic sugar +## فقط یک سینتکس شکری نیست -Sometimes people say that `class` is a "syntactic sugar" (syntax that is designed to make things easier to read, but doesn't introduce anything new), because we could actually declare the same without `class` keyword at all: +گاهی اوقات مردم می‌گویند که `class` یک «سینتکس شکری» است (سینتکسی که برای خواندن ساده‌تر طراحی شده است، اما چیز جدیدی معرفی نمی‌کند)، زیرا در واقع می‌توانیم همان را بدون کلمه کلیدی `class` اعلام کنیم: ```js run -// rewriting class User in pure functions +// بازنویسی کلاس کاربر در توابع خالص -// 1. Create constructor function +// 1. ایجاد تابع سازنده function User(name) { this.name = name; } -// a function prototype has "constructor" property by default, -// so we don't need to create it +// یک پروتوتایپ تابع به طور پیش‌فرض دارای ویژگی "سازنده" است، +// پس ما نیاز نداریم که آن را ایجاد کنیم -// 2. Add the method to prototype +// 2. اضافه کردن متد به پروتوتایپ User.prototype.sayHi = function() { alert(this.name); }; @@ -140,13 +142,13 @@ let user = new User("John"); user.sayHi(); ``` -The result of this definition is about the same. So, there are indeed reasons why `class` can be considered a syntactic sugar to define a constructor together with its prototype methods. +نتیجه این تعریف تقریباً یکسان است. بنابراین، در واقع دلایلی وجود دارد که می‌توان `class` را یک سینتکس شکری برای تعریف سازنده همراه با روش‌های نمونه اولیه آن در نظر گرفت. -Still, there are important differences. +با این حال، تفاوت‌های مهمی وجود دارد. -1. First, a function created by `class` is labelled by a special internal property `[[IsClassConstructor]]: true`. So it's not entirely the same as creating it manually. +1. ابتدا، یک تابع ایجاد شده توسط `class` توسط یک ویژگی داخلی ویژه `[[IsClassConstructor]]: true` برچسب گذاری می‌شود:. بنابراین کاملاً مشابه ایجاد آن به صورت دستی نیست. - The language checks for that property in a variety of places. For example, unlike a regular function, it must be called with `new`: + زبان آن ویژگی را در مکان‌های مختلف بررسی می‌کند. به عنوان مثال، بر خلاف یک تابع معمولی، باید با `new` فراخوانی شود: ```js run class User { @@ -154,10 +156,10 @@ Still, there are important differences. } alert(typeof User); // function - User(); // Error: Class constructor User cannot be invoked without 'new' + User(); // خطا: سازنده کلاس کاربر را نمی‌توان بدون 'new' فراخوانی کرد ``` - Also, a string representation of a class constructor in most JavaScript engines starts with the "class..." + همچنین، نمایش رشته‌ای از سازنده کلاس در اکثر موتورهای جاوا‌اسکریپت با "کلاس..." شروع می‌شود. ```js run class User { @@ -166,55 +168,55 @@ Still, there are important differences. alert(User); // class User { ... } ``` - There are other differences, we'll see them soon. + تفاوت‌های دیگری نیز وجود دارد، به زودی آنها را خواهیم دید. -2. Class methods are non-enumerable. - A class definition sets `enumerable` flag to `false` for all methods in the `"prototype"`. +2. روش‌های کلاس غیرقابل شمارش هستند. + یک تعریف کلاس، پرچم `enumerable` را برای همه متدهای `"prototype"`روی `false` تنظیم می‌کند. - That's good, because if we `for..in` over an object, we usually don't want its class methods. + این خوب است، زیرا اگر `for..in` را روی یک شیء قرار دهیم، معمولاً متد‌های کلاس آن را نمی‌خواهیم. -3. Classes always `use strict`. - All code inside the class construct is automatically in strict mode. +3. کلاس‌ها همیشه از `use strict` استفاده می‌کنند. + تمام کدهای داخل ساختار کلاس به طور خودکار در حالت سخت قرار می‌گیرند. -Besides, `class` syntax brings many other features that we'll explore later. +علاوه بر این، سینتکس `class` بسیاری از ویژگی‌های دیگر را به همراه دارد که بعداً بررسی خواهیم کرد. -## Class Expression +## بیان کلاس -Just like functions, classes can be defined inside another expression, passed around, returned, assigned, etc. +درست مانند توابع، کلاس‌ها را می‌توان در یک عبارت دیگر تعریف کرد، ارسال کرد، برگرداند، تخصیص داد و غیره. -Here's an example of a class expression: +در اینجا نمونه‌ای از عبارت کلاس آورده شده است: ```js let User = class { sayHi() { - alert("Hello"); + alert("سلام"); } }; ``` -Similar to Named Function Expressions, class expressions may have a name. +شبیه به عبارت‌های تابع نام‌گذاری شده، عبارات کلاس ممکن است یک نام داشته باشند. -If a class expression has a name, it's visible inside the class only: +اگر یک عبارت کلاس دارای نام باشد، فقط در داخل کلاس قابل مشاهده است: ```js run -// "Named Class Expression" -// (no such term in the spec, but that's similar to Named Function Expression) +// «عبارت کلاس نامگذاری شده» +// (چنین اصطلاحی در مشخصات وجود ندارد، اما شبیه به عبارت تابع نامگذاری شده است) let User = class *!*MyClass*/!* { sayHi() { - alert(MyClass); // MyClass name is visible only inside the class + alert(MyClass); // فقط در داخل کلاس قابل مشاهده است MyClass نام } }; -new User().sayHi(); // works, shows MyClass definition +new User().sayHi(); // را نشان می دهد MyClass کار می کند، تعریف -alert(MyClass); // error, MyClass name isn't visible outside of the class +alert(MyClass); // خارج از کلاس قابل مشاهده نیست MyClass خطا، نام ``` -We can even make classes dynamically "on-demand", like this: +ما حتی می‌توانیم کلاس‌ها را به صورت پویا "بر اساس تقاضا" بسازیم، مانند این: ```js run function makeClass(phrase) { - // declare a class and return it + // یک کلاس تعریف کنید و آن را برگردانید return class { sayHi() { alert(phrase); @@ -223,23 +225,23 @@ function makeClass(phrase) { } // Create a new class -let User = makeClass("Hello"); +let User = makeClass("سلام"); -new User().sayHi(); // Hello +new User().sayHi(); // سلام ``` -## Getters/setters +## گیرنده/ تنظیم کننده -Just like literal objects, classes may include getters/setters, computed properties etc. +درست مانند اشیاء تحت اللفظی، کلاس‌ها ممکن است شامل گیرنده‌ها/تنظیم کننده‌ها، خصوصیات محاسبه شده و غیره باشند. -Here's an example for `user.name` implemented using `get/set`: +در اینجا یک مثال برای `user.name` است که با استفاده از `get/set` پیاده‌سازی شده است: ```js run class User { constructor(name) { - // invokes the setter + // تنظیم کننده را فراخوانی می‌کند this.name = name; } @@ -253,7 +255,7 @@ class User { set name(value) { */!* if (value.length < 4) { - alert("Name is too short."); + alert("نام بسیار کوتاه است."); return; } this._name = value; @@ -264,14 +266,14 @@ class User { let user = new User("John"); alert(user.name); // John -user = new User(""); // Name is too short. +user = new User(""); // .نام بسیار کوتاه است ``` -Technically, such class declaration works by creating getters and setters in `User.prototype`. +از نظر فنی، چنین فراخوانی کلاس با ایجاد گیرنده و تنظیم کننده در `User.prototype` کار می‌کند. -## Computed names [...] +## نام‌های محاسبه شده [...] -Here's an example with a computed method name using brackets `[...]`: +در اینجا یک مثال با نام متد محاسبه شده با استفاده از براکت `[...]` آورده شده است: ```js run class User { @@ -279,7 +281,7 @@ class User { *!* ['say' + 'Hi']() { */!* - alert("Hello"); + alert("سلام"); } } @@ -287,19 +289,19 @@ class User { new User().sayHi(); ``` -Such features are easy to remember, as they resemble that of literal objects. +به خاطر سپردن چنین ویژگی‌هایی آسان است، زیرا آنها شبیه به اشیاء تحت اللفظی هستند. -## Class fields +## فیلدهای کلاس -```warn header="Old browsers may need a polyfill" -Class fields are a recent addition to the language. +```warn header="مرورگرهای قدیمی ممکن است به polyfill نیاز داشته باشند" +فیلدهای کلاس اخیرا به زبان اضافه شده هستند. ``` -Previously, our classes only had methods. +قبلا، کلاس‌های ما فقط متد داشتند. -"Class fields" is a syntax that allows to add any properties. +"فیلدهای کلاس" سینتکسی است که اجازه می‌دهد هر ویژگی را اضافه کنید. -For instance, let's add `name` property to `class User`: +برای مثال، اجازه دهید ویژگی `name` را به `class User` اضافه کنیم: ```js run class User { @@ -315,9 +317,9 @@ class User { new User().sayHi(); // Hello, John! ``` -So, we just write " = " in the declaration, and that's it. +بنابراین، ما فقط " = " را در فراخوانی می‌نویسیم، و تمام. -The important difference of class fields is that they are set on individual objects, not `User.prototype`: +تفاوت مهم فیلدهای کلاس در این است که آنها بر روی اشیاء جداگانه تنظیم می‌شوند، نه `User.prototype`: ```js run class User { @@ -331,12 +333,12 @@ alert(user.name); // John alert(User.prototype.name); // undefined ``` -We can also assign values using more complex expressions and function calls: +همچنین می‌توانیم با استفاده از عبارات و فراخوانی‌های توابع پیچیده‌تر، مقادیری را اختصاص دهیم: ```js run class User { *!* - name = prompt("Name, please?", "John"); + name = prompt("نام، لطفا؟", "John"); */!* } @@ -345,13 +347,13 @@ alert(user.name); // John ``` -### Making bound methods with class fields +### ساخت متدهای محدود با فیلدهای کلاس -As demonstrated in the chapter functions in JavaScript have a dynamic `this`. It depends on the context of the call. +همانطور که در فصل نشان داده شد توابع در جاوا‌اسکریپت دارای `this` پویا هستند. بستگی به زمینه فراخوانی دارد. -So if an object method is passed around and called in another context, `this` won't be a reference to its object any more. +بنابراین، اگر یک متد شیء منتقل شود و در زمینه دیگری فراخوانی شود، `this` دیگر ارجاعی به شیء آن نخواهد بود. -For instance, this code will show `undefined`: +به عنوان مثال، این کد `undefined` را نشان می‌دهد: ```js run class Button { @@ -364,21 +366,21 @@ class Button { } } -let button = new Button("hello"); +let button = new Button("سلام"); *!* setTimeout(button.click, 1000); // undefined */!* ``` -The problem is called "losing `this`". +مشکل "از دست دادن `this`" نامیده می‌شود. -There are two approaches to fixing it, as discussed in the chapter : +همانطور که در فصل مورد بحث قرار گرفت، دو روش برای رفع آن وجود دارد: -1. Pass a wrapper-function, such as `setTimeout(() => button.click(), 1000)`. -2. Bind the method to object, e.g. in the constructor. +1. یک تابع دربرگیرنده مانند `setTimeout(() => button.click(), 1000)` را عبور دهید. +2. متد را به شیء متصل کنید، به عنوان مثال. در سازنده -Class fields provide another, quite elegant syntax: +فیلدهای کلاس، سینتکس بسیار ظریف دیگری را ارائه می‌دهند: ```js run class Button { @@ -392,37 +394,37 @@ class Button { */!* } -let button = new Button("hello"); +let button = new Button("سلام"); -setTimeout(button.click, 1000); // hello +setTimeout(button.click, 1000); // سلام ``` -The class field `click = () => {...}` is created on a per-object basis, there's a separate function for each `Button` object, with `this` inside it referencing that object. We can pass `button.click` around anywhere, and the value of `this` will always be correct. +فیلد کلاس `click = () => {...}` بر اساس هر شیء ایجاد می‌شود، یک تابع جداگانه برای هر شیء `Button` وجود دارد که `this` در داخل آن به آن شی ارجاع می‌دهد. ما می‌توانیم `button.click` را به هر جایی منتقل کنیم، و مقدار `this` همیشه درست خواهد بود. -That's especially useful in browser environment, for event listeners. +این به ویژه در محیط مرورگر، برای شنوندگان رویداد مفید است. -## Summary +## خلاصه -The basic class syntax looks like this: +سینتکس کلاس پایه به شکل زیر است: ```js class MyClass { - prop = value; // property + prop = value; // ویژگی - constructor(...) { // constructor + constructor(...) { // سازنده // ... } - method(...) {} // method + method(...) {} // متد - get something(...) {} // getter method - set something(...) {} // setter method + get something(...) {} // متد گیرنده + set something(...) {} // متد تنظیم کننده - [Symbol.iterator]() {} // method with computed name (symbol here) + [Symbol.iterator]() {} // (Symbol در اینجا) متد با نام محاسبه شده // ... } ``` -`MyClass` is technically a function (the one that we provide as `constructor`), while methods, getters and setters are written to `MyClass.prototype`. +`MyClass` از نظر فنی یک تابع است (توابعی که ما به عنوان `constructor` ارائه می‌کنیم)، در حالی که متدها، دریافت کننده‌ها و تنظیم کننده‌ها در `MyClass.prototype` نوشته می‌شوند. -In the next chapters we'll learn more about classes, including inheritance and other features. +در فصل‌های بعدی درباره کلاس‌ها، از جمله وراثت و سایر ویژگی‌ها بیشتر خواهیم آموخت. From ce00f15b9db86e6ad73633cb4fcc3d26d4b29fd1 Mon Sep 17 00:00:00 2001 From: AmirhosseinVeysi Date: Wed, 24 Nov 2021 23:31:43 +0330 Subject: [PATCH 2/9] Translated task --- 1-js/09-classes/01-class/1-rewrite-to-class/task.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/1-js/09-classes/01-class/1-rewrite-to-class/task.md b/1-js/09-classes/01-class/1-rewrite-to-class/task.md index 4477de679..ba79defed 100644 --- a/1-js/09-classes/01-class/1-rewrite-to-class/task.md +++ b/1-js/09-classes/01-class/1-rewrite-to-class/task.md @@ -2,8 +2,8 @@ importance: 5 --- -# Rewrite to class +# با کلاس بازنویسی کنید -The `Clock` class (see the sandbox) is written in functional style. Rewrite it in the "class" syntax. +کلاس `Clock` (به جعبه شنی مراجعه کنید) به سبک تابع نوشته شده است. آن را در سینتکس "کلاس" بازنویسی کنید. -P.S. The clock ticks in the console, open it to see. +ضمیمه: تیک تاک ساعت در کنسول، آن را باز کنید تا ببینید. From 4ad82b759064e68e8b09a13853d3fc02b3ace8c4 Mon Sep 17 00:00:00 2001 From: AmirhosseinVeysi Date: Wed, 24 Nov 2021 23:44:55 +0330 Subject: [PATCH 3/9] Corrected typo mistake --- 1-js/09-classes/01-class/article.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/1-js/09-classes/01-class/article.md b/1-js/09-classes/01-class/article.md index cbf773567..98cc71b72 100644 --- a/1-js/09-classes/01-class/article.md +++ b/1-js/09-classes/01-class/article.md @@ -399,7 +399,7 @@ let button = new Button("سلام"); setTimeout(button.click, 1000); // سلام ``` -فیلد کلاس `click = () => {...}` بر اساس هر شیء ایجاد می‌شود، یک تابع جداگانه برای هر شیء `Button` وجود دارد که `this` در داخل آن به آن شی ارجاع می‌دهد. ما می‌توانیم `button.click` را به هر جایی منتقل کنیم، و مقدار `this` همیشه درست خواهد بود. +فیلد کلاس `click = () => {...}` بر اساس هر شیء ایجاد می‌شود، یک تابع جداگانه برای هر شیء `Button` وجود دارد که `this` در داخل آن به آن شیء ارجاع می‌دهد. ما می‌توانیم `button.click` را به هر جایی منتقل کنیم، و مقدار `this` همیشه درست خواهد بود. این به ویژه در محیط مرورگر، برای شنوندگان رویداد مفید است. @@ -417,10 +417,10 @@ class MyClass { method(...) {} // متد - get something(...) {} // متد گیرنده + get something(...) {} // متد گیرنده set something(...) {} // متد تنظیم کننده - [Symbol.iterator]() {} // (Symbol در اینجا) متد با نام محاسبه شده + [Symbol.iterator]() {} // (Symbol در اینجا) متد با نام محاسبه شده // ... } ``` From b58b5c40385337ec1087b054718a1d597de2ed99 Mon Sep 17 00:00:00 2001 From: AmirhosseinVeysi Date: Fri, 26 Nov 2021 13:38:08 +0330 Subject: [PATCH 4/9] Modified "syntactic sugar" translation --- 1-js/09-classes/01-class/article.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/1-js/09-classes/01-class/article.md b/1-js/09-classes/01-class/article.md index 98cc71b72..5cf98665c 100644 --- a/1-js/09-classes/01-class/article.md +++ b/1-js/09-classes/01-class/article.md @@ -118,9 +118,9 @@ alert(User.prototype.sayHi); // sayHi کد متد alert(Object.getOwnPropertyNames(User.prototype)); // sayHi ،سازنده ``` -## فقط یک سینتکس شکری نیست +## فقط یک سینتکس برای زیباکردن(syntactic sugar) نیست -گاهی اوقات مردم می‌گویند که `class` یک «سینتکس شکری» است (سینتکسی که برای خواندن ساده‌تر طراحی شده است، اما چیز جدیدی معرفی نمی‌کند)، زیرا در واقع می‌توانیم همان را بدون کلمه کلیدی `class` اعلام کنیم: +گاهی اوقات مردم می‌گویند که `class` یک «سینتکس برای زیباکردن(syntactic sugar)» است (سینتکسی که برای خواندن ساده‌تر طراحی شده است، اما چیز جدیدی معرفی نمی‌کند)، زیرا در واقع می‌توانیم همان را بدون کلمه کلیدی `class` اعلام کنیم: ```js run // بازنویسی کلاس کاربر در توابع خالص @@ -142,7 +142,7 @@ let user = new User("John"); user.sayHi(); ``` -نتیجه این تعریف تقریباً یکسان است. بنابراین، در واقع دلایلی وجود دارد که می‌توان `class` را یک سینتکس شکری برای تعریف سازنده همراه با روش‌های نمونه اولیه آن در نظر گرفت. +نتیجه این تعریف تقریباً یکسان است. بنابراین، در واقع دلایلی وجود دارد که می‌توان `class` را یک سینتکس برای زیباکردن(syntactic sugar) برای تعریف سازنده همراه با روش‌های نمونه اولیه آن در نظر گرفت. با این حال، تفاوت‌های مهمی وجود دارد. From 4cc7fa47b72794dc1bfd175bd5e3141fb68e56ec Mon Sep 17 00:00:00 2001 From: AmirhosseinVeysi Date: Fri, 26 Nov 2021 17:10:58 +0330 Subject: [PATCH 5/9] Resolved a typo issue --- 1-js/09-classes/01-class/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/09-classes/01-class/article.md b/1-js/09-classes/01-class/article.md index 5cf98665c..0223eb8a3 100644 --- a/1-js/09-classes/01-class/article.md +++ b/1-js/09-classes/01-class/article.md @@ -120,7 +120,7 @@ alert(Object.getOwnPropertyNames(User.prototype)); // sayHi ،سازنده ## فقط یک سینتکس برای زیباکردن(syntactic sugar) نیست -گاهی اوقات مردم می‌گویند که `class` یک «سینتکس برای زیباکردن(syntactic sugar)» است (سینتکسی که برای خواندن ساده‌تر طراحی شده است، اما چیز جدیدی معرفی نمی‌کند)، زیرا در واقع می‌توانیم همان را بدون کلمه کلیدی `class` اعلام کنیم: +گاهی اوقات مردم می‌گویند که `class` یک «سینتکس برای زیباکردن(syntactic sugar)» است (سینتکسی که برای خواندن ساده‌تر طراحی شده است، اما چیز جدیدی معرفی نمی‌کند)، زیرا در واقع می‌توانیم همان را بدون کلمه کلیدی `class` تعریف کنیم: ```js run // بازنویسی کلاس کاربر در توابع خالص From 4cf2f57cb276b55f8d26e26361d5a7ee3717e105 Mon Sep 17 00:00:00 2001 From: AmirhosseinVeysi Date: Fri, 26 Nov 2021 17:17:30 +0330 Subject: [PATCH 6/9] Removed English lines --- 1-js/09-classes/01-class/article.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/1-js/09-classes/01-class/article.md b/1-js/09-classes/01-class/article.md index 0223eb8a3..1fec9828d 100644 --- a/1-js/09-classes/01-class/article.md +++ b/1-js/09-classes/01-class/article.md @@ -49,12 +49,10 @@ let user = new User("John"); user.sayHi(); ``` -When `new User("John")` is called: وقتی `new User("John")` فراخوانی می‌شود: 1. یک شیء جدید ایجاد می‌شود. 2. `constructor` با آرگومان داده شده اجرا می‌شود و آن را به `this.name` اختصاص می‌دهد. -...Then we can call object methods, such as `user.sayHi()`. ..سپس ما می‌توانیم متد‌های شیء را فراخوانی کنیم، مانند `user.sayHi()`. From c1978d866fac86b893669fb47017b386af7f1807 Mon Sep 17 00:00:00 2001 From: AmirhosseinVeysi Date: Sat, 27 Nov 2021 23:59:12 +0330 Subject: [PATCH 7/9] Resolved issues --- 1-js/09-classes/01-class/1-rewrite-to-class/task.md | 2 +- 1-js/09-classes/01-class/article.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/1-js/09-classes/01-class/1-rewrite-to-class/task.md b/1-js/09-classes/01-class/1-rewrite-to-class/task.md index ba79defed..cab4f912d 100644 --- a/1-js/09-classes/01-class/1-rewrite-to-class/task.md +++ b/1-js/09-classes/01-class/1-rewrite-to-class/task.md @@ -6,4 +6,4 @@ importance: 5 کلاس `Clock` (به جعبه شنی مراجعه کنید) به سبک تابع نوشته شده است. آن را در سینتکس "کلاس" بازنویسی کنید. -ضمیمه: تیک تاک ساعت در کنسول، آن را باز کنید تا ببینید. +ضمیمه: ساعت در کنسول تیک‌‌تاک می‌کند، آن را باز کنید تا ببینید. diff --git a/1-js/09-classes/01-class/article.md b/1-js/09-classes/01-class/article.md index 1fec9828d..547af265a 100644 --- a/1-js/09-classes/01-class/article.md +++ b/1-js/09-classes/01-class/article.md @@ -1,7 +1,7 @@ # سینتکس پایه کلاس -```quote author="ویکی پدیا" +```quote author="ویکی‌پدیا" در برنامه‌نویسی شیء‌گرا، *کلاس* یک الگوی-کد-برنامه قابل توسعه برای ایجاد اشیاء، ارائه مقادیر اولیه برای حالت (متغیرهای عضو) و پیاده‌سازی رفتار (توابع یا روش‌های عضو) است. ``` From 154977bb261f2c9f4872fdd1241a7c83637da636 Mon Sep 17 00:00:00 2001 From: AmirhosseinVeysi Date: Mon, 29 Nov 2021 22:00:20 +0330 Subject: [PATCH 8/9] Resolved typo misstake --- 1-js/09-classes/01-class/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/09-classes/01-class/article.md b/1-js/09-classes/01-class/article.md index 547af265a..2d8c0170c 100644 --- a/1-js/09-classes/01-class/article.md +++ b/1-js/09-classes/01-class/article.md @@ -205,7 +205,7 @@ let User = class *!*MyClass*/!* { } }; -new User().sayHi(); // را نشان می دهد MyClass کار می کند، تعریف +new User().sayHi(); // را نشان می‌دهد MyClass کار می کند، تعریف alert(MyClass); // خارج از کلاس قابل مشاهده نیست MyClass خطا، نام ``` From 2fde77245310836d0605fc8b22aea3f8d3bfec1d Mon Sep 17 00:00:00 2001 From: AmirhosseinVeysi Date: Mon, 29 Nov 2021 22:04:47 +0330 Subject: [PATCH 9/9] Corrected mistake --- 1-js/09-classes/01-class/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/09-classes/01-class/article.md b/1-js/09-classes/01-class/article.md index 2d8c0170c..f1f11efda 100644 --- a/1-js/09-classes/01-class/article.md +++ b/1-js/09-classes/01-class/article.md @@ -397,7 +397,7 @@ let button = new Button("سلام"); setTimeout(button.click, 1000); // سلام ``` -فیلد کلاس `click = () => {...}` بر اساس هر شیء ایجاد می‌شود، یک تابع جداگانه برای هر شیء `Button` وجود دارد که `this` در داخل آن به آن شیء ارجاع می‌دهد. ما می‌توانیم `button.click` را به هر جایی منتقل کنیم، و مقدار `this` همیشه درست خواهد بود. +فیلد کلاس `click = () => {...}` بر اساس هر شیء ایجاد می‌شود، یک تابع جداگانه برای هر شیء `Button` وجود دارد که `this` در داخل آن به آن شیء ارجاع می‌دهد. ما می‌توانیم `button.click` را به هر‌جایی منتقل کنیم، و مقدار `this` همیشه درست خواهد بود. این به ویژه در محیط مرورگر، برای شنوندگان رویداد مفید است.