aboutsummaryrefslogtreecommitdiff
path: root/files/bg/web/javascript/reference/classes/static/index.html
blob: 971bf403452917e49e3b66dfe270becfdc47c1b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
---
title: static
slug: Web/JavaScript/Reference/Classes/static
tags:
  - Класове
  - Статичен
  - статичен метод
translation_of: Web/JavaScript/Reference/Classes/static
---
<div>{{jsSidebar("Classes")}}</div>

<p><span class="seoSummary">Ключовата дума <code><strong>static</strong></code> дефинира статичен метод за клас. Static methods aren't called on instances of the class. Instead, they're called on the class itself.</span> <span lang="bg">Това често са помощни функции, като например функции за създаване или клониране на обекти.</span></p>

<div>{{EmbedInteractiveExample("pages/js/classes-static.html")}}</div>



<h2 id="Синтаксис">Синтаксис</h2>

<pre class="syntaxbox">static <em>methodName</em>() { ... }</pre>

<h2 id="Описание">Описание</h2>

<p>Статичните методи се правят директно в класът и не могат да се извикват като инстанции на клас.</p>

<h2 id="Извикване_на_статичен_метод">Извикване на статичен метод</h2>

<h3 id="От_друг_статичен_метод">От друг статичен метод</h3>

<p>За да извикате статичен метод в рамките на друг статичен метод от същия клас, може да използвате ключовата дума <code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/this">this</a></code>.</p>

<pre class="brush: js">class StaticMethodCall {
  static staticMethod() {
    return 'Static method has been called';
  }
  static anotherStaticMethod() {
    return this.staticMethod() + ' from another static method';
  }
}
StaticMethodCall.staticMethod();
// 'Static method has been called'

StaticMethodCall.anotherStaticMethod();
// 'Static method has been called from another static method'</pre>

<h3 id="От_конструктора_на_клас_и_други_методи">От конструктора на клас и други методи</h3>

<p>Статичните методи не са пряко достъпни, когато се използва ключовата дума <code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/this">this</a></code> от нестатични методи. Трябва да ги извикате, използвайки името на класа: <code>CLASSNAME.STATIC_METHOD_NAME()</code> или да извикате метода като собственост на <code>constructor</code><code>this.constructor.STATIC_METHOD_NAME()</code>.</p>

<pre class="brush: js">class StaticMethodCall {
  constructor() {
    console.log(StaticMethodCall.staticMethod());
    // 'static method has been called.'

    console.log(this.constructor.staticMethod());
    // 'static method has been called.'
  }

  static staticMethod() {
    return 'static method has been called.';
  }
}</pre>

<h2 id="Примери">Примери</h2>

<p>Следният пример показва няколко неща:</p>

<ol>
 <li>Как статичните методи се изпълняват в класът.</li>
 <li>Това , че клас със статичен член може да бъде под-класиран.</li>
 <li>Как статичният метод може и не може да бъде извикан.</li>
</ol>

<pre class="brush: js">class Triple {
  static triple(n) {
    if (n === undefined) {
      n = 1;
    }
    return n * 3;
  }
}

class BiggerTriple extends Triple {
  static triple(n) {
    return super.triple(n) * super.triple(n);
  }
}

console.log(Triple.triple());        // 3
console.log(Triple.triple(6));       // 18

var tp = new Triple();

console.log(BiggerTriple.triple(3));
// 81 (not affected by parent's instantiation)

console.log(tp.triple());
// 'tp.triple is not a function'.
</pre>

<h2 id="Спецификации">Спецификации</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Спецификации</th>
   <th scope="col">Статус</th>
   <th scope="col">Коментар</th>
  </tr>
  <tr>
   <td>{{SpecName('ES2015', '#sec-class-definitions', 'Class definitions')}}</td>
   <td>{{Spec2('ES2015')}}</td>
   <td>Initial definition.</td>
  </tr>
  <tr>
   <td>{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}}</td>
   <td>{{Spec2('ESDraft')}}</td>
   <td> </td>
  </tr>
 </tbody>
</table>

<h2 id="Съвместимост_с_браузера">Съвместимост с браузера</h2>



<p>{{Compat("javascript.classes.static")}}</p>

<h2 id="Вижте_още">Вижте още</h2>

<ul>
 <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/class"><code>класови</code> израз</a></li>
 <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/class">декларация на <code>клас</code></a></li>
 <li><a href="/en-US/docs/Web/JavaScript/Reference/Classes">Класове</a></li>
</ul>