Skip to content

Commit e3f2422

Browse files
committed
translated function/constructors
1 parent 15e3f47 commit e3f2422

File tree

1 file changed

+124
-0
lines changed

1 file changed

+124
-0
lines changed

doc/tr/function/constructors.md

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
## Nesne Oluşturucular
2+
3+
JavaScript'te oluşturucular diğer dillerden farklıdır. Başında `new` bulunan
4+
her fonksiyon çağrısı bir oluşturucudur.
5+
6+
Oluşturucunun (çağırılan fonksiyonun) içinde `this` 'in değeri yeni yaratılan
7+
`Object` 'dir. Bu **yeni** nesnenin [`prototipi`](#object.prototype) oluşturucu
8+
olarak çağrılan fonksiyon nesnesinin prototipidir.
9+
10+
Çağrılan fonksiyonda bir `return` ifadesi yoksa, `this` (yani yeni nesneyi)
11+
döndürür.
12+
13+
function Foo() {
14+
this.bla = 1;
15+
}
16+
17+
Foo.prototype.test = function() {
18+
console.log(this.bla);
19+
};
20+
21+
var test = new Foo();
22+
23+
Yukarıdaki program `Foo` oluşturucusunu çağırır ve yeni yaratılan nesnenin
24+
`prototipini` `Foo.prototype` olarak belirler.
25+
26+
Oluşturucunun içinde bir `return` ifadesi bulunması durumunda, **ve sadece**
27+
bu değer bir `Object` ise oluşturucu fonksiyon verilen değeri döndürür.
28+
29+
function Bar() {
30+
return 2;
31+
}
32+
new Bar(); // yeni bir Bar nesnesi
33+
34+
function Test() {
35+
this.value = 2;
36+
37+
return {
38+
foo: 1
39+
};
40+
}
41+
new Test(); // döndürülen nesne
42+
43+
`new` anahtar kelimesi ihmal edilirse, fonksiyon yeni bir nesne **döndürmez**.
44+
45+
function Foo() {
46+
this.bla = 1; // global nesnenin özelliğini değiştirir
47+
}
48+
Foo(); // undefined
49+
50+
Yukarıdaki örnek bazı durumlarda doğru çalışıyor gibi görünebilir, ama
51+
JavaeScript'te [`this`](#function.this) 'in çalışma şeklinden dolayı `this`
52+
'in değeri *global nesne* olacaktır.
53+
54+
### Nesne fabrikaları
55+
56+
`new` anahtar kelimesini ihmal edebilmek için oluşturucu fonksiyonun bir değer
57+
döndürmesi gerekir.
58+
59+
function Bar() {
60+
var value = 1;
61+
return {
62+
method: function() {
63+
return value;
64+
}
65+
}
66+
}
67+
Bar.prototype = {
68+
foo: function() {}
69+
};
70+
71+
new Bar();
72+
Bar();
73+
74+
Yukarıda `Bar` fonksiyonunu çağıran her iki ifade de aynı şeyi döndürecektir:
75+
`method` adında bir [Closure](#function.closures) özelliği olan yeni yaratılmış
76+
bir nesne.
77+
78+
Başka bir nokta da `new Bar()` fonksiyonunun döndürülen nesnenin prototipini
79+
**etkilememesidir**. Yeni nesnenin prototipi oluşturulacaktır ancak `Bar` bu
80+
nesneyi döndürmez.
81+
82+
Yukarıdaki örnekte `new` anahtar kelimesini kullanmakla kullanamamak arasında
83+
hiçbir bir fark yoktur.
84+
85+
### Fabrikalar ile yeni nesneler oluşturmak
86+
87+
`new` anahtar kelimesinin **kullanılmaması** tavsiye olunur, çünkü unutulması
88+
durumu hatalara sebep olabilir.
89+
90+
Bunun yerine yeni bir nesne oluşturmak için bir fabrika kullanılmalıdır.
91+
92+
function Foo() {
93+
var obj = {};
94+
obj.value = 'blub';
95+
96+
var private = 2;
97+
obj.someMethod = function(value) {
98+
this.value = value;
99+
}
100+
101+
obj.getPrivate = function() {
102+
return private;
103+
}
104+
return obj;
105+
}
106+
107+
Yukarıdaki örnek hem `new` anahtar kelimesinin unutulmasından etkilenmez hem de
108+
[private değikenlerin](#function.closures) kullanılmasını kolaylaştırır, ama
109+
bazı dezavantajları da vardır.
110+
111+
1. Oluşturulan nesneler bir prototip üzerinde metotlarını **paylaşmadıkları**
112+
için daha fazla hafıza kullanılır.
113+
2. Başka bir sınıf türetmek için fabrikanın tüm metotları başka bir nesneden
114+
kopyalaması veya bu nesneyi yeni nesnenin prototipine yerleştirmesi gerekir.
115+
3. Sadece `new` anahtar kelimesinin ihmal edilmesinden kaynaklanacak sorunları
116+
gidermek için prototip zincirinden vazgeçmek dilin ruhuna aykırıdır.
117+
118+
### Sonuç
119+
120+
`new` anahtar kelimesini ihmal etmek hatalara neden olabilir, fakat bu
121+
kesinlikle prototip zincirinden vazgeçmek için bir neden **olamaz**. Hangi
122+
çözümün belirli bir programa uygun olduğu kararını verirken, en önemli nokta
123+
nesne oluşturmak için belirli bir yöntemi seçip bu çözüme **bağlı kalmaktır**.
124+

0 commit comments

Comments
 (0)