Oct 28, 2013
Oct 28, 2013
1
---
2
contributors:
Oct 28, 2013
Oct 28, 2013
6
---
7
8
<p dir='rtl'>
9
جاوااسکریپت توسط برندن ایش از شرکت NetScape در سال 1995 ساخته شد. در ابتدا به عنوان یک زبان اسکریپتنویسی در کنار جاوا (که برای موارد پیچیده تر در طراحی وب در نظر گرفته میشد) مورد استفاده بود، ولی در پی نفوذ بسیار گسترده آن در وب و همچنین پشتیبانی پیش-ساخته آن در مرورگر ها، امروزه به مراتب بیشتر از جاوا در برنامه نویسی سمت-کاربر در وب به کار برده میشود.
10
با این حال جاوااسکریپت فقط محدود به مرورگر های وب نمیشود. Node.js پروژه ایست که یک نسخه ی مستقل از اجراکننده ی موتور جاوااسکریپت V8 از گوگل کروم را در اختیار قرار میده که هر روزه درحال محبوب تر شدن نیز هست.
11
</p>
12
13
<p dir='rtl'>
14
// توضیحات همانند C هستند. توضیحات یک خطی با دو خط مورب شروع میشوند.,
15
</p>
16
17
<p dir='rtl'>
18
/* و توضیحات چند خطی با خط مورب-ستاره شروع،
19
و با ستاره-خط مورب ختم میشوند */
20
</p>
21
22
```js
23
// Comments are like C. Single-line comments start with two slashes,
24
/* and multiline comments start with slash-star
25
and end with star-slash */
26
```
Oct 28, 2013
Oct 28, 2013
28
<p dir='rtl'>
29
گزاره ها را میتوانید با نقطه ویرگول پایان دهید ;
30
</p>
Oct 28, 2013
Oct 28, 2013
32
```js
33
doStuff();
34
```
Oct 28, 2013
Oct 28, 2013
36
<p dir='rtl'>
37
ولی لزومی به این کار نیست. نقطه ویرگول به صورت خودکار در نظر گرفته میشوند.
38
</p>
39
<p dir='rtl'>
40
وقتی که خط جدیدی شروع میشود. مگر در موارد خاص.
41
</p>
Oct 28, 2013
Oct 28, 2013
43
```js
44
doStuff()
45
```
Oct 28, 2013
Oct 28, 2013
47
<p dir='rtl'>برای اینگه درگیر آن موارد خاص نشویم، در اینجا از اون ها </p>
48
<p dir='rtl'>صرف نظر میکنیم.</p>
49
50
<h2 dir='rtl'>1. اعداد، رشته ها و عملگرها</h2>
51
52
<p dir='rtl'>جاوااسکریپت فقط یک نوع عدد دارد و آن عدد اعشاری 64 بیتی IEEE 754 است.</p>
53
<p dir='rtl'>نترسید! و نگران اعداد صحیح نباشید! این اعداد اعشاری دارای 54 بیت مانتیس هستند که قابلیت ذخیره ی </p>
54
<p dir='rtl'>دقیق اعداد صحیح تا مقدار تقریبی 9x10¹⁵ را دارند.</p>
Oct 28, 2013
Oct 28, 2013
56
```js
57
3; // = 3
58
1.5; // = 1.5
59
```
Oct 28, 2013
Oct 28, 2013
61
<p dir='rtl'>
62
تمامی عملگر های محاسباتی آن طوری که انتظارش را دارید عمل خواهند کرد.
63
</p>
Oct 28, 2013
Oct 28, 2013
65
```js
66
1 + 1; // = 2
67
8 - 1; // = 7
68
10 * 2; // = 20
69
35 / 5; // = 7
70
```
Oct 28, 2013
Oct 28, 2013
72
<p dir='rtl'>و این حتی شامل تقسیم هم میشود.</p>
Oct 28, 2013
Oct 28, 2013
74
```js
75
5 / 2; // = 2.5
76
```
Oct 28, 2013
Oct 28, 2013
78
<p dir='rtl'>عملگر های بیتی هم به همین شکل. وقتی از یک عملگر بیتی استفاده میکنید، عدد اعشاری شما</p>
79
<p dir='rtl'>به عدد صحیح علامت دار *تا 32 بیت* تبدیل میشود.</p>
Oct 28, 2013
Oct 28, 2013
81
```js
82
1 << 2; // = 4
83
```
Oct 28, 2013
Oct 28, 2013
85
<p dir='rtl'>عملیات داخل پرانتز تقدم بالاتری دارند.</p>
Oct 28, 2013
Oct 28, 2013
87
```js
88
(1 + 3) * 2; // = 8
89
```
Oct 28, 2013
Oct 28, 2013
91
<p dir='rtl'>سه مقدار خاص وجود دارند که در واقع مقادیر عددی نیستند:</p>
Oct 28, 2013
Oct 28, 2013
93
```js
94
Infinity; // result of e.g. 1/0
95
-Infinity; // result of e.g. -1/0
96
NaN; // result of e.g. 0/0
97
```
Oct 28, 2013
Oct 28, 2013
99
<p dir='rtl'>مقادیر بولی هم تعریف شده هستند:</p>
Oct 28, 2013
Oct 28, 2013
101
```js
102
true;
103
false;
104
```
Oct 28, 2013
Oct 28, 2013
106
<p dir='rtl'>رشته ها با آپستروف و یا گیومه تعریف میشوند.</p>
Oct 28, 2013
Oct 28, 2013
108
```js
109
'abc';
110
"Hello, world";
111
```
Oct 28, 2013
Oct 28, 2013
113
<p dir='rtl'>و منفی کردن شرط با علامت تعجب</p>
Oct 28, 2013
Oct 28, 2013
115
```js
116
!true; // = false
117
!false; // = true
118
```
Oct 28, 2013
Oct 28, 2013
120
<p dir='rtl'>تساوی دو مقدار با ==</p>
Oct 28, 2013
Oct 28, 2013
122
```js
123
1 == 1; // = true
124
2 == 1; // = false
125
```
Oct 28, 2013
Oct 28, 2013
127
<p dir='rtl'>و عدم تساوی با !=</p>
Oct 28, 2013
Oct 28, 2013
129
```js
130
1 != 1; // = false
131
2 != 1; // = true
132
```
Oct 28, 2013
Oct 28, 2013
134
<p dir='rtl'>و سایر عمیلات های مقایسه</p>
Oct 28, 2013
Oct 28, 2013
136
```js
137
1 < 10; // = true
138
1 > 10; // = false
139
2 <= 2; // = true
140
2 >= 2; // = true
141
```
Oct 28, 2013
Oct 28, 2013
143
<p dir='rtl'>رشته ها با علامت جمع به یکدیگر متصل میشوند</p>
Oct 28, 2013
Oct 28, 2013
145
```js
146
"Hello " + "world!"; // = "Hello world!"
147
```
Oct 28, 2013
Oct 28, 2013
149
<p dir='rtl'>و با علامت برگتر و یا کوچکتر با یکدیگر مقایسه میشوند.</p>
Oct 28, 2013
Oct 28, 2013
151
```js
152
"a" < "b"; // = true
153
```
Oct 28, 2013
Oct 28, 2013
155
<p dir='rtl'>نوع متغیر برای عملیات مقایسه تطبیق داده میشود</p>
Oct 28, 2013
Oct 28, 2013
157
```js
158
"5" == 5; // = true
159
```
Oct 28, 2013
Oct 28, 2013
161
<p dir='rtl'>مگر اینکه از سه مساوی استفاده شود!</p>
Oct 28, 2013
Oct 28, 2013
163
```js
164
"5" === 5; // = false
165
```
Oct 28, 2013
Oct 28, 2013
167
<p dir='rtl'>با استفاده از charAt میتوانید به کارکتر های یک رشته دسترسی پیدا کنید.</p>
Oct 28, 2013
Oct 28, 2013
169
```js
170
"This is a string".charAt(0);
171
```
Oct 28, 2013
Oct 28, 2013
173
<p dir='rtl'>از null برای نشان دادن عمدی مقدار هیج استفاده میشود.</p>
174
<p dir='rtl'>و از undefined برای نشان دادن اینکه در حال حاظر مقدار موجود نمی باشد، هرچند خود undefined یک مقدار محسوب میشود.</p>
Oct 28, 2013
Oct 28, 2013
176
```js
177
null; // used to indicate a deliberate non-value
178
undefined; // used to indicate a value is not currently present (although undefined
179
// is actually a value itself)
180
```
Oct 28, 2013
Oct 28, 2013
182
<p dir='rtl'>false, null, undefined, NaN, 0 و "" مقدار نادرست و هر چیز دیگر مقدار درست طلقی میشوند.</p>
183
<p dir='rtl'>توجه داشته باشید که 0 نادرست و "0" درست طلقی میشوند حتی در عبارت 0=="0".</p>
184
185
<h2 dir='rtl'> 2. متغیر ها، آرایه ها و شئ ها </h2>
186
187
<p dir='rtl'>متغیر ها با کلید واژه var تعریف میشوند. اشیا در جاوااسکریپت دارای نوع پویا هستند، </p>
188
<p dir='rtl'>بدین شکل که برای تعریف نیازی به مشخص کردن نوع متعیر نیست. </p>
189
<p dir='rtl'>برای مقدار دهی از علامت مساوی استفاده میشود. </p>
Oct 28, 2013
Oct 28, 2013
191
```js
192
var someVar = 5;
193
```
194
195
<p dir='rtl'>اگر کلید واژه var را قرار ندهید، هیچ خطایی دریافت نخواهید کرد... </p>
Oct 28, 2013
Oct 28, 2013
197
```js
198
someOtherVar = 10;
199
```
200
201
<p dir='rtl'>در عوض متغیر شما در گستره ی کل برنامه تعریف شده خواهد بود. </p>
202
203
<p dir='rtl'>متغیر هایی که تعریف شده ولی مقدار دهی نشوند، دارای مقدار undefined خواهند بود. </p>
Oct 28, 2013
Oct 28, 2013
205
```js
206
var someThirdVar; // = undefined
207
```
208
209
<p dir='rtl'>برای اعمال عملگر های محاسباتی، میانبر هایی وجود دارند: </p>
Oct 28, 2013
Oct 28, 2013
211
```js
212
someVar += 5; // equivalent to someVar = someVar + 5; someVar is 10 now
213
someVar *= 10; // now someVar is 100
214
```
215
216
<p dir='rtl'>حتی از این هم کوتاهتر برای اضافه یا کم کردن یک عدد با مقدار یک. </p>
Oct 28, 2013
Oct 28, 2013
218
```js
219
someVar++; // now someVar is 101
220
someVar--; // back to 100
221
```
222
223
<p dir='rtl'>آرایه ها در واقع لیستی مرتب شده از مقادیر مختلف از هر نوعی هستند. </p>
Oct 28, 2013
Oct 28, 2013
225
```js
226
var myArray = ["Hello", 45, true];
227
```
228
229
<p dir='rtl'>به اعضای یک آرایه میتوان از طریق قرار دادن کروشه در جلوی نام آن دسترسی پیدا کرد. </p>
230
<p dir='rtl'>نمایه ی آرایه از صفر شروع میشود. </p>
Oct 28, 2013
Oct 28, 2013
232
```js
233
myArray[1]; // = 45
234
```
235
236
<p dir='rtl'>آرایه ها ناپایدار و دارای طول قابل تغییر هستند </p>
Oct 28, 2013
Oct 28, 2013
238
```js
239
myArray.push("World");
240
myArray.length; // = 4
241
```
242
243
<p dir='rtl'>در جاوااسکریپت، اشیاء چیزی شبیه دیکشنری و یا نقشه در زبان های دیگر هستند: </p>
244
<p dir='rtl'>یک مجموعه ی نامرتب از جفت های کلید-مقدار. </p>
Oct 28, 2013
Oct 28, 2013
246
```js
247
var myObj = {key1: "Hello", key2: "World"};
248
```
249
250
<p dir='rtl'>کلید ها از نوع رشته هستند ولی در صورتی که مقدار معتبری برای اسم گزاری باشند نیازی به آوردن آنها درون گیومه نیست. </p>
Oct 28, 2013
Oct 28, 2013
252
```js
253
var myObj = {myKey: "myValue", "my other key": 4};
254
```
255
256
<p dir='rtl'>اعضای یک شئ را نیز میتوانید با استفاده از کروشه در مقابل نام آنها استخراج کنید. </p>
Oct 28, 2013
Oct 28, 2013
258
```js
259
myObj["my other key"]; // = 4
260
```
261
262
<p dir='rtl'>...و یا از طریق نقطه در صورتی که اسم عضو مورد نظر اسم معتبری برای اسم گزاری باشد.</p>
Oct 28, 2013
Oct 28, 2013
264
```js
265
myObj.myKey; // = "myValue"
266
```
267
268
<p dir='rtl'>اشیاء ناپایدار و قابل اضافه کردن عضو جدید هستند.</p>
Oct 28, 2013
Oct 28, 2013
270
```js
271
myObj.myThirdKey = true;
272
```
273
274
<p dir='rtl'>اگر سعی کنید عضوی را که وجود ندارد استخراج کنید، مقدار undefined را دریافت خواهید کرد. </p>
Oct 28, 2013
Oct 28, 2013
276
```js
277
myObj.myFourthKey; // = undefined
278
```
279
280
<h2 dir='rtl'>3. منطق و ساختار کنترل</h2>
281
282
<p dir='rtl'>ساختار if به شکلی که انتظارش را دارید کار میکند.</p>
Oct 28, 2013
Oct 28, 2013
284
```js
285
var count = 1;
286
if (count == 3){
287
// evaluated if count is 3
288
} else if (count == 4) {
289
// evaluated if count is 4
290
} else {
291
// evaluated if it's not either 3 or 4
292
}
293
```
294
295
<p dir='rtl'>و همینطور حلقه while</p>
Oct 28, 2013
Oct 28, 2013
297
```js
298
while (true) {
299
// An infinite loop!
300
}
301
```
302
303
<p dir='rtl'>حلقه do-while شبیه while است با این تفاوت که حداقل یکبار اجرا میشود.</p>
Oct 28, 2013
Oct 28, 2013
305
```js
306
var input
307
do {
308
input = getInput();
309
} while (!isValid(input))
310
```
311
312
<p dir='rtl'>حلقه for همانند زبان C و جاوا کار می کند.</p>
313
<p dir='rtl'>مقدار دهی اولیه; شرط ادامه; چرخش حلقه</p>
Oct 28, 2013
Oct 28, 2013
315
```js
316
for (var i = 0; i < 5; i++){
317
// will run 5 times
318
}
319
```
320
321
<p dir='rtl'>عملگر && و || به ترتیب "و" و "یا" ی منطقی هستند.</p>
Oct 28, 2013
Oct 28, 2013
323
```js
324
if (house.size == "big" && house.colour == "blue"){
325
house.contains = "bear";
326
}
327
if (colour == "red" || colour == "blue"){
328
// colour is either red or blue
329
}
330
```
331
332
<p dir='rtl'>از || همچنین میتوان برای تعیین مقدار پیشفرض استفاده کرد.</p>
Oct 28, 2013
Oct 28, 2013
334
```js
335
var name = otherName || "default";
336
```
337
338
<h2 dir='rtl'>4. توابع و مفاهیم گستره و بستار</h2>
339
340
<p dir='rtl'>توابع در جاوااسکریپت با استفاده از کلیدواژه ی function تعریف میشوند.</p>
Oct 28, 2013
Oct 28, 2013
342
```js
343
function myFunction(thing){
344
return thing.toUpperCase();
345
}
346
myFunction("foo"); // = "FOO"
347
```
348
349
<p dir='rtl'>توابع در جاوااسکریپت نوعی شئ پایه محسوب میشوند، بنابر این می توانید آنها را به اشیاء مختلف</p>
350
<p dir='rtl'>اضافه کنید و یا به عنوان پارامتر به توابع دیگر ارسال کنید.</p>
351
<p dir='rtl'>- برای مثال وقتی که با یک رویداد کار میکنید.</p>
Oct 28, 2013
Oct 28, 2013
353
```js
354
function myFunction(){
355
// this code will be called in 5 seconds' time
356
}
357
setTimeout(myFunction, 5000);
358
```
359
360
<p dir='rtl'>توجه کنید که setTimeout تابعی تعریف شده در جاوااسکریپت نیست، ولی مرورگر ها و node.js از آن پشتیبانی میکنند.</p>
361
362
363
<p dir='rtl'>توابع نیازی به داشتن اسم ندارند. برای مثال وقتی تابعی را به تابعی دیگر ارسال میکنید</p>
364
<p dir='rtl'>میتوانید آنرا به صورت بینام تعریف کنید.</p>
Oct 28, 2013
Oct 28, 2013
366
```js
367
setTimeout(function(){
368
// this code will be called in 5 seconds' time
369
}, 5000);
370
```
371
372
<p dir='rtl'>توابع دارای محدوده ی متغیر های خود هستند.</p>
373
<p dir='rtl'>بر خلاف دیگر ساختار ها - مانند if</p>
Oct 28, 2013
Oct 28, 2013
375
```js
376
if (true){
377
var i = 5;
378
}
379
i; // = 5 - not undefined as you'd expect in a block-scoped language
380
```
381
382
<p dir='rtl'>به همین دلیل الگوی خاصی به نام "تابعی که بلافاصله صدا زده میشود" پدید آمده </p>
383
<p dir='rtl'>تا از اضافه شدن متغیر های قسمتی از برنامه به گستره ی کلی برنامه جلوگیری شود.</p>
Oct 28, 2013
Oct 28, 2013
385
```js
386
(function(){
387
var temporary = 5;
388
// We can access the global scope by assiging to the 'global object', which
389
// in a web browser is always 'window'. The global object may have a
390
// different name in non-browser environments such as Node.js.
391
window.permanent = 10;
392
})();
393
temporary; // raises ReferenceError
394
permanent; // = 10
395
```
396
397
<p dir='rtl'>یکی از برترین ویژگی های جاوااسکریپت مفهومی با نام بستار است</p>
398
<p dir='rtl'>بدین شکل که اگر تابعی درون تابع دیگری تعریف شود، تابع درونی به تمام متغیر های تابع خارجی دسترسی</p>
399
<p dir='rtl'>خواهد داشت، حتی بعد از اینکه تابع خارجی به اتمام رسیده باشد.</p>
Oct 28, 2013
Oct 28, 2013
401
```js
402
function sayHelloInFiveSeconds(name){
403
var prompt = "Hello, " + name + "!";
404
function inner(){
405
alert(prompt);
406
}
407
setTimeout(inner, 5000);
408
// setTimeout is asynchronous, so the sayHelloInFiveSeconds function will
409
// exit immediately, and setTimeout will call inner afterwards. However,
410
// because inner is "closed over" sayHelloInFiveSeconds, inner still has
411
// access to the 'prompt' variable when it is finally called.
412
}
413
sayHelloInFiveSeconds("Adam"); // will open a popup with "Hello, Adam!" in 5s
414
```
415
416
<h2 dir='rtl'>5. دیگر اشیاء، سازنده ها و پیشنمونه ها</h2>
417
418
<p dir='rtl'>اشیاء میتوانند تابع داشته باشند.</p>
Oct 28, 2013
Oct 28, 2013
420
```js
421
var myObj = {
422
myFunc: function(){
423
return "Hello world!";
424
}
425
};
426
myObj.myFunc(); // = "Hello world!"
427
```
428
429
<p dir='rtl'>وقتی تابع یک شی صدا زده می شود، تابع میتواند به سایر مقادیر درون آن شی </p>
430
<p dir='rtl'>از طریق کلید واژه ی this دسترسی داشته باشد.</p>
Oct 28, 2013
Oct 28, 2013
432
```js
433
myObj = {
434
myString: "Hello world!",
435
myFunc: function(){
436
return this.myString;
437
}
438
};
439
myObj.myFunc(); // = "Hello world!"
440
```
441
442
443
<p dir='rtl'>اینکه مقدار this چه باشد بستگی به این دارد که تابع چگونه صدا زده شود</p>
444
<p dir='rtl'>نه اینکه تابع کجا تعریف شده است.</p>
445
<p dir='rtl'>بنابر این تابع بالا اگر بدین شکل صدا زده شود کار نخواهد کرد</p>
Oct 28, 2013
Oct 28, 2013
447
```js
448
var myFunc = myObj.myFunc;
449
myFunc(); // = undefined
450
```
451
452
453
<p dir='rtl'>به همین شکل، تابعی که در جای دیگر تعریف شده را میتوانید به یک شی الحاق کنید</p>
454
<p dir='rtl'>و بدین ترتیب تابع میتواند به مقادیر درون شی از طریق this دسترسی پیدا کند.</p>
Oct 28, 2013
Oct 28, 2013
456
```js
457
var myOtherFunc = function(){
458
return this.myString.toUpperCase();
459
}
460
myObj.myOtherFunc = myOtherFunc;
461
myObj.myOtherFunc(); // = "HELLO WORLD!"
462
```
463
464
465
<p dir='rtl'>اگر تابعی با کلید new صدا زده شوند، شی جدیدی ایجاد شده و تابع در گستره ی آن صدا زده میشود.</p>
466
<p dir='rtl'>توابعی که بدین شکل صدا زده شوند در واقع نقش سازنده را ایفا می کنند.</p>
Oct 28, 2013
Oct 28, 2013
468
```js
469
var MyConstructor = function(){
470
this.myNumber = 5;
471
}
472
myNewObj = new MyConstructor(); // = {myNumber: 5}
473
myNewObj.myNumber; // = 5
474
```
475
476
477
<p dir='rtl'>تمامی اشیاء در جاوااسکریپت دارای یک پیش نمونه هستند</p>
478
<p dir='rtl'>به شکلی که اگر تابع صدا زده شده بر روی شی مستقیما روی آن تعریف نشده باشد</p>
479
<p dir='rtl'>اجرا کننده ی برنامه در لیست پیش نمونه به دنبال آن تابع خواهد گشت</p>
480
481
<p dir='rtl'>برخی اجرا کننده های جاوااسکریپت به شما اجازه ی دسترسی به پیش نمونه های یک شی را از</p>
482
<p dir='rtl'>طریق عضو جادویی __proto__ میدهند.</p>
483
<p dir='rtl'>هرچند این به شناخت پیش نمونه ها کمک میکند ولی در حیطه ی جاوااسکریپت استاندارد قرار نمیگیرد.</p>
484
<p dir='rtl'>در ادامه شکل استاندارد پیش نمونه ها مورد بررسی قرار میگیرند.</p>
Oct 28, 2013
Oct 28, 2013
486
```js
487
var myObj = {
488
myString: "Hello world!",
489
};
490
var myPrototype = {
491
meaningOfLife: 42,
492
myFunc: function(){
493
return this.myString.toLowerCase()
494
}
495
};
496
myObj.__proto__ = myPrototype;
497
myObj.meaningOfLife; // = 42
498
```
499
500
<p dir='rtl'>این موضوع در مورد توابع نیز صدق میکند.</p>
Oct 28, 2013
Oct 28, 2013
502
```js
503
myObj.myFunc(); // = "hello world!"
504
```
505
506
507
<p dir='rtl'>اگر عضو مورد نظر در پیش نمونه ی شی یافت نشود، پیش نمونه ی پیش نمونه جستجو شده و الی آخر</p>
Oct 28, 2013
Oct 28, 2013
509
```js
510
myPrototype.__proto__ = {
511
myBoolean: true
512
};
513
myObj.myBoolean; // = true
514
```
515
516
517
<p dir='rtl'>توجه داشته باشید که پیش نمونه ها کپی نمی شوند و هر شی جدید به پیش نمونه موجود اشاره میکند</p>
518
<p dir='rtl'>بدین ترتیب اگر تابعی به پیش نمونه اضافه شود تمامی اشیاء میتوانند به آن دسترسی پیدا کنند.</p>
Oct 28, 2013
Oct 28, 2013
520
```js
521
myPrototype.meaningOfLife = 43;
522
myObj.meaningOfLife; // = 43
523
```
524
525
<p dir='rtl'>پیش تر اشاره شد که __proto__ راه استانداردی برای دسترسی به پیش نمونه نیست و هیچ استانداردی نیز برای دسترسی به پیش نمونه ی یک شی موجود پیش بینی نشده است</p>
526
<p dir='rtl'>ولی دو راه برای ارائه پیش نمونه برای اشیاء جدید وجود دارد.</p>
527
528
<p dir='rtl'>اولی وقتیست که از تابع Object.create استفاده میشود - که اخیرا به زبان اضافه شده است و بنابراین بر روی همه ی پیاده سازی های آن وجود ندارد.</p>
Oct 28, 2013
Oct 28, 2013
530
```js
531
var myObj = Object.create(myPrototype);
532
myObj.meaningOfLife; // = 43
533
```
534
535
536
<p dir='rtl'>راه دوم - که همه جا قابل استفاده است - مربوط به سازنده ها می شود.</p>
537
<p dir='rtl'>سازنده ها دارای عضوی با نام prototype هستند. این پیش نمونه ی خود سازنده نیست</p>
538
<p dir='rtl'>بلکه پیش نمونه ایست که به تمامی اشیاء ساخته شده توسط این سازنده الحاق میشود.</p>
Oct 28, 2013
Oct 28, 2013
540
```js
541
MyConstructor.prototype = {
542
myNumber: 5,
543
getMyNumber: function(){
544
return this.myNumber;
545
}
546
};
547
var myNewObj2 = new MyConstructor();
548
myNewObj2.getMyNumber(); // = 5
549
myNewObj2.myNumber = 6
550
myNewObj2.getMyNumber(); // = 6
551
```
552
553
554
<p dir='rtl'>رشته ها و سایر سازنده های پیش ساخته ی زبان نیز دارای این ویژگی هستند.</p>
Oct 28, 2013
Oct 28, 2013
556
```js
557
var myNumber = 12;
558
var myNumberObj = new Number(12);
559
myNumber == myNumberObj; // = true
560
```
561
562
563
<p dir='rtl'>به جز این که این سازنده ها دقیقا مانند سازنده های دیگر نیستند.</p>
Oct 28, 2013
Oct 28, 2013
565
```js
Oct 28, 2013
Oct 28, 2013
568
myNumber === myNumberObj; // = false
569
if (0){
570
// This code won't execute, because 0 is falsy.
571
}
572
```
573
574
575
<p dir='rtl'>ولی به هر حال هم اشیاء عادی و هم اشیاء پیش ساخته هر دو در داشتن پیش نمونه مشترک هستند</p>
576
<p dir='rtl'>بنابر این شما میتوانید ویژگی و تابع جدیدی به رشته ها - به عنوان مثال - اضافه کنید.</p>
577
578
579
<p dir='rtl'>گاها به از این خاصیت با عنوان پلی فیل و برای اضافه کردن ویژگی های جدید به مجموعه ای از اشیاء فعلی زبان استفاده میشود </p>
580
<p dir='rtl'>که کاربرد فراوانی در پشتیبانی از نسخه های قدیمیتر مرورگر ها دارد.</p>
Oct 28, 2013
Oct 28, 2013
582
```js
583
String.prototype.firstCharacter = function(){
584
return this.charAt(0);
585
}
586
"abc".firstCharacter(); // = "a"
587
```
588
589
590
<p dir='rtl'>برای مثال، پیشتر اشاره کردیم که Object.create در نسخه های جدید پشتیبانی نشده است</p>
591
<p dir='rtl'>ولی میتوان آن را به صورت پلی فیل استفاده کرد.</p>
Oct 28, 2013
Oct 28, 2013
593
```js
594
if (Object.create === undefined){ // don't overwrite it if it exists
595
Object.create = function(proto){
596
// make a temporary constructor with the right prototype
597
var Constructor = function(){};
598
Constructor.prototype = proto;
599
// then use it to create a new, appropriately-prototyped object
600
return new Constructor();
601
}
602
}
603
```
604
605
<h2 dir='rtl'> منابع دیگر </h2>
606
607
The [Mozilla Developer
608
Network](https://developer.mozilla.org/en-US/docs/Web/JavaScript)
609
<p dir='rtl'>مرجعی بسیار خوب برای جاوااسکریپت به شکلی که در مرورگر ها مورد استفاده قرار گرفته است.</p>
610
<p dir='rtl'>از آنجایی که این منبع یک ویکی میباشد همانطور که مطالب بیشتری یاد میگیرید میتوانید به دیگران نیز در یادگیری آن کمک کنید.</p>
611
612
MDN's [A re-introduction to
613
JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript)
614
<p dir='rtl'>مشابه مطالبی که اینجا مطرح شده با جزییات بیشتر. در اینجا به شکل عمدی جاوااسکریپت فقط از دیدگاه زبان برنامه نویسی مورد بررسی قرار گرفته</p>
615
<p dir='rtl'>در حالی که در این منبع میتوانید بیشتر از کاربرد آن در صفحات وب آشنایی پیدا کنید.</p>
616
[Document Object
617
Model](https://developer.mozilla.org/en-US/docs/Using_the_W3C_DOM_Level_1_Core)
618
Oct 28, 2013
Oct 28, 2013
620
<p dir='rtl'>راهنمای دقیقی از قسمت های غیر ملموس زبان.</p>
621
622
<p dir='rtl'>اضافه بر این در ویرایش این مقاله، قسمت هایی از سایت زیر مورد استفاده قرار گرفته است.</p>
623
Louie Dinh's Python tutorial on this site, and the [JS
624
Tutorial](https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript)
625
on the Mozilla Developer Network.