adambard · GitHub

Oct 28, 2013

Oct 28, 2013

1

---

2

contributors:

Feb 13, 2020

Feb 13, 2020

3

- ["Leigh Brenecki", "https://leigh.net.au"]

Oct 29, 2013

Oct 29, 2013

4

translators:

5

- ["Mohammad Valipour", "https://github.com/mvalipour"]

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

```

Apr 6, 2024

Apr 6, 2024

27

Oct 28, 2013

Oct 28, 2013

28

<p dir='rtl'>

29

گزاره ها را میتوانید با نقطه ویرگول پایان دهید ;

30

</p>

Apr 6, 2024

Apr 6, 2024

31

Oct 28, 2013

Oct 28, 2013

32

```js

33

doStuff();

34

```

Apr 6, 2024

Apr 6, 2024

35

Oct 28, 2013

Oct 28, 2013

36

<p dir='rtl'>

37

ولی لزومی به این کار نیست. نقطه ویرگول به صورت خودکار در نظر گرفته میشوند.

38

</p>

39

<p dir='rtl'>

40

وقتی که خط جدیدی شروع میشود. مگر در موارد خاص.

41

</p>

Apr 6, 2024

Apr 6, 2024

42

Oct 28, 2013

Oct 28, 2013

43

```js

44

doStuff()

45

```

Apr 6, 2024

Apr 6, 2024

46

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>

Apr 6, 2024

Apr 6, 2024

55

Oct 28, 2013

Oct 28, 2013

56

```js

57

3; // = 3

58

1.5; // = 1.5

59

```

Apr 6, 2024

Apr 6, 2024

60

Oct 28, 2013

Oct 28, 2013

61

<p dir='rtl'>

62

تمامی عملگر های محاسباتی آن طوری که انتظارش را دارید عمل خواهند کرد.

63

</p>

Apr 6, 2024

Apr 6, 2024

64

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

```

Apr 6, 2024

Apr 6, 2024

71

Oct 28, 2013

Oct 28, 2013

72

<p dir='rtl'>و این حتی شامل تقسیم هم میشود.</p>

Apr 6, 2024

Apr 6, 2024

73

Oct 28, 2013

Oct 28, 2013

74

```js

75

5 / 2; // = 2.5

76

```

Apr 6, 2024

Apr 6, 2024

77

Oct 28, 2013

Oct 28, 2013

78

<p dir='rtl'>عملگر های بیتی هم به همین شکل. وقتی از یک عملگر بیتی استفاده میکنید، عدد اعشاری شما</p>

79

<p dir='rtl'>به عدد صحیح علامت دار *تا 32 بیت* تبدیل میشود.</p>

Apr 6, 2024

Apr 6, 2024

80

Oct 28, 2013

Oct 28, 2013

81

```js

82

1 << 2; // = 4

83

```

Apr 6, 2024

Apr 6, 2024

84

Oct 28, 2013

Oct 28, 2013

85

<p dir='rtl'>عملیات داخل پرانتز تقدم بالاتری دارند.</p>

Apr 6, 2024

Apr 6, 2024

86

Oct 28, 2013

Oct 28, 2013

87

```js

88

(1 + 3) * 2; // = 8

89

```

Apr 6, 2024

Apr 6, 2024

90

Oct 28, 2013

Oct 28, 2013

91

<p dir='rtl'>سه مقدار خاص وجود دارند که در واقع مقادیر عددی نیستند:</p>

Apr 6, 2024

Apr 6, 2024

92

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

```

Apr 6, 2024

Apr 6, 2024

98

Oct 28, 2013

Oct 28, 2013

99

<p dir='rtl'>مقادیر بولی هم تعریف شده هستند:</p>

Apr 6, 2024

Apr 6, 2024

100

Oct 28, 2013

Oct 28, 2013

101

```js

102

true;

103

false;

104

```

Apr 6, 2024

Apr 6, 2024

105

Oct 28, 2013

Oct 28, 2013

106

<p dir='rtl'>رشته ها با آپستروف و یا گیومه تعریف میشوند.</p>

Apr 6, 2024

Apr 6, 2024

107

Oct 28, 2013

Oct 28, 2013

108

```js

109

'abc';

110

"Hello, world";

111

```

Apr 6, 2024

Apr 6, 2024

112

Oct 28, 2013

Oct 28, 2013

113

<p dir='rtl'>و منفی کردن شرط با علامت تعجب</p>

Apr 6, 2024

Apr 6, 2024

114

Oct 28, 2013

Oct 28, 2013

115

```js

116

!true; // = false

117

!false; // = true

118

```

Apr 6, 2024

Apr 6, 2024

119

Oct 28, 2013

Oct 28, 2013

120

<p dir='rtl'>تساوی دو مقدار با ==</p>

Apr 6, 2024

Apr 6, 2024

121

Oct 28, 2013

Oct 28, 2013

122

```js

123

1 == 1; // = true

124

2 == 1; // = false

125

```

Apr 6, 2024

Apr 6, 2024

126

Oct 28, 2013

Oct 28, 2013

127

<p dir='rtl'>و عدم تساوی با !=</p>

Apr 6, 2024

Apr 6, 2024

128

Oct 28, 2013

Oct 28, 2013

129

```js

130

1 != 1; // = false

131

2 != 1; // = true

132

```

Apr 6, 2024

Apr 6, 2024

133

Oct 28, 2013

Oct 28, 2013

134

<p dir='rtl'>و سایر عمیلات های مقایسه</p>

Apr 6, 2024

Apr 6, 2024

135

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

```

Apr 6, 2024

Apr 6, 2024

142

Oct 28, 2013

Oct 28, 2013

143

<p dir='rtl'>رشته ها با علامت جمع به یکدیگر متصل میشوند</p>

Apr 6, 2024

Apr 6, 2024

144

Oct 28, 2013

Oct 28, 2013

145

```js

146

"Hello " + "world!"; // = "Hello world!"

147

```

Apr 6, 2024

Apr 6, 2024

148

Oct 28, 2013

Oct 28, 2013

149

<p dir='rtl'>و با علامت برگتر و یا کوچکتر با یکدیگر مقایسه میشوند.</p>

Apr 6, 2024

Apr 6, 2024

150

Oct 28, 2013

Oct 28, 2013

151

```js

152

"a" < "b"; // = true

153

```

Apr 6, 2024

Apr 6, 2024

154

Oct 28, 2013

Oct 28, 2013

155

<p dir='rtl'>نوع متغیر برای عملیات مقایسه تطبیق داده میشود</p>

Apr 6, 2024

Apr 6, 2024

156

Oct 28, 2013

Oct 28, 2013

157

```js

158

"5" == 5; // = true

159

```

Apr 6, 2024

Apr 6, 2024

160

Oct 28, 2013

Oct 28, 2013

161

<p dir='rtl'>مگر اینکه از سه مساوی استفاده شود!</p>

Apr 6, 2024

Apr 6, 2024

162

Oct 28, 2013

Oct 28, 2013

163

```js

164

"5" === 5; // = false

165

```

Apr 6, 2024

Apr 6, 2024

166

Oct 28, 2013

Oct 28, 2013

167

<p dir='rtl'>با استفاده از charAt میتوانید به کارکتر های یک رشته دسترسی پیدا کنید.</p>

Apr 6, 2024

Apr 6, 2024

168

Oct 28, 2013

Oct 28, 2013

169

```js

170

"This is a string".charAt(0);

171

```

Apr 6, 2024

Apr 6, 2024

172

Oct 28, 2013

Oct 28, 2013

173

<p dir='rtl'>از null برای نشان دادن عمدی مقدار هیج استفاده میشود.</p>

174

<p dir='rtl'>و از undefined برای نشان دادن اینکه در حال حاظر مقدار موجود نمی باشد، هرچند خود undefined یک مقدار محسوب میشود.</p>

Apr 6, 2024

Apr 6, 2024

175

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

```

Apr 6, 2024

Apr 6, 2024

181

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>

Apr 6, 2024

Apr 6, 2024

190

Oct 28, 2013

Oct 28, 2013

191

```js

192

var someVar = 5;

193

```

194

195

<p dir='rtl'>اگر کلید واژه var را قرار ندهید، هیچ خطایی دریافت نخواهید کرد... </p>

Apr 6, 2024

Apr 6, 2024

196

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>

Apr 6, 2024

Apr 6, 2024

204

Oct 28, 2013

Oct 28, 2013

205

```js

206

var someThirdVar; // = undefined

207

```

208

209

<p dir='rtl'>برای اعمال عملگر های محاسباتی، میانبر هایی وجود دارند: </p>

Apr 6, 2024

Apr 6, 2024

210

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>

Apr 6, 2024

Apr 6, 2024

217

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>

Apr 6, 2024

Apr 6, 2024

224

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>

Apr 6, 2024

Apr 6, 2024

231

Oct 28, 2013

Oct 28, 2013

232

```js

233

myArray[1]; // = 45

234

```

235

236

<p dir='rtl'>آرایه ها ناپایدار و دارای طول قابل تغییر هستند </p>

Apr 6, 2024

Apr 6, 2024

237

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>

Apr 6, 2024

Apr 6, 2024

245

Oct 28, 2013

Oct 28, 2013

246

```js

247

var myObj = {key1: "Hello", key2: "World"};

248

```

249

250

<p dir='rtl'>کلید ها از نوع رشته هستند ولی در صورتی که مقدار معتبری برای اسم گزاری باشند نیازی به آوردن آنها درون گیومه نیست. </p>

Apr 6, 2024

Apr 6, 2024

251

Oct 28, 2013

Oct 28, 2013

252

```js

253

var myObj = {myKey: "myValue", "my other key": 4};

254

```

255

256

<p dir='rtl'>اعضای یک شئ را نیز میتوانید با استفاده از کروشه در مقابل نام آنها استخراج کنید. </p>

Apr 6, 2024

Apr 6, 2024

257

Oct 28, 2013

Oct 28, 2013

258

```js

259

myObj["my other key"]; // = 4

260

```

261

262

<p dir='rtl'>...و یا از طریق نقطه در صورتی که اسم عضو مورد نظر اسم معتبری برای اسم گزاری باشد.</p>

Apr 6, 2024

Apr 6, 2024

263

Oct 28, 2013

Oct 28, 2013

264

```js

265

myObj.myKey; // = "myValue"

266

```

267

268

<p dir='rtl'>اشیاء ناپایدار و قابل اضافه کردن عضو جدید هستند.</p>

Apr 6, 2024

Apr 6, 2024

269

Oct 28, 2013

Oct 28, 2013

270

```js

271

myObj.myThirdKey = true;

272

```

273

274

<p dir='rtl'>اگر سعی کنید عضوی را که وجود ندارد استخراج کنید، مقدار undefined را دریافت خواهید کرد. </p>

Apr 6, 2024

Apr 6, 2024

275

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>

Apr 6, 2024

Apr 6, 2024

283

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>

Apr 6, 2024

Apr 6, 2024

296

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>

Apr 6, 2024

Apr 6, 2024

304

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>

Apr 6, 2024

Apr 6, 2024

314

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>

Apr 6, 2024

Apr 6, 2024

322

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>

Apr 6, 2024

Apr 6, 2024

333

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>

Apr 6, 2024

Apr 6, 2024

341

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>

Apr 6, 2024

Apr 6, 2024

352

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>

Apr 6, 2024

Apr 6, 2024

365

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>

Apr 6, 2024

Apr 6, 2024

374

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>

Apr 6, 2024

Apr 6, 2024

384

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>

Apr 6, 2024

Apr 6, 2024

400

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>

Apr 6, 2024

Apr 6, 2024

419

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>

Apr 6, 2024

Apr 6, 2024

431

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>

Apr 6, 2024

Apr 6, 2024

446

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>

Apr 6, 2024

Apr 6, 2024

455

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>

Apr 6, 2024

Apr 6, 2024

467

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>

Apr 6, 2024

Apr 6, 2024

485

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>

Apr 6, 2024

Apr 6, 2024

501

Oct 28, 2013

Oct 28, 2013

502

```js

503

myObj.myFunc(); // = "hello world!"

504

```

505

506

507

<p dir='rtl'>اگر عضو مورد نظر در پیش نمونه ی شی یافت نشود، پیش نمونه ی پیش نمونه جستجو شده و الی آخر</p>

Apr 6, 2024

Apr 6, 2024

508

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>

Apr 6, 2024

Apr 6, 2024

519

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>

Apr 6, 2024

Apr 6, 2024

529

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>

Apr 6, 2024

Apr 6, 2024

539

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>

Apr 6, 2024

Apr 6, 2024

555

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>

Apr 6, 2024

Apr 6, 2024

564

Oct 28, 2013

Oct 28, 2013

565

```js

Aug 9, 2014

Aug 9, 2014

566

typeof myNumber; // = 'number'

567

typeof myNumberObj; // = 'object'

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>

Apr 6, 2024

Apr 6, 2024

581

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>

Apr 6, 2024

Apr 6, 2024

592

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

Dec 4, 2024

Dec 4, 2024

619

[JavaScript Garden](https://shamansir.github.io/JavaScript-Garden/)

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.

Read the original on github.com ↗