JavaScript’te “Object” (Nesne) Metotları Nelerdir?
JavaScript’te “Object” objesi, çeşitli özellikleri ve metotları olan temel objedir. Objemizin sahip olduğu metotlar, açıklamalarıyla beraber alfabetik bir sıralamayla aşağıdaki tabloya eklenmiştir:
Metot | Açıklama |
---|---|
Object.assign() | Hedef objenin özelliklerini kaynak objelerden hedef objeye kopyalar. |
Object.create() | Belirli bir prototip objesini miras alan yeni bir obje oluşturur. |
Object.keys() | Bir objenin kendi özelliklerinin isimlerini bir dizi olarak döndürür. |
Object.values() | Bir objenin kendi özelliklerinin değerlerini bir dizi olarak döndürür. |
Object.freeze() | Bir objeyi “dondurur”, objenin değiştirilmesini önler. |
Object.defineProperty() | Bir objeye yeni bir özellik ekler veya bir objenin mevcut bir özelliğini değiştirir. |
Object.prototype.hasOwnProperty() | Bir objenin belirli bir özelliği olup olmadığını kontrol eder. |
Object.setPrototypeOf(obj, prototype) | Belirli bir objenin prototipini değiştirmek için kullanılır. |
⭐ Object.assign()
: Bu metot, bir objenin sahip olduğu özellikleri bir başka objeye kopyalamak için kullanılır. Ancak bu kopyalama yüzeyde (shallow copy) gerçekleşir, derin bir kopyalama (deep copy) yapmaz. Örneğin:
let obj1 = {
a: 1,
b: 2,
greet: function() {
console.log('Merhaba obj1!');
}
};
let obj2 = {
c: 3,
greetAgain: function() {
console.log('Merhaba obj2!');
}
};
let obj3 = Object.assign(obj1, obj2);
console.log(obj3); // {a: 1, b: 2, c: 3, greet: [Function: greet], greetAgain: [Function: greetAgain]}
obj3.greet(); // "Merhaba obj1!" çıktısını verir
obj3.greetAgain(); // "Merhaba obj2!" çıktısını verir
⭐ Object.create()
, belirli bir prototip objesini miras alan yeni bir obje oluşturur. Aşağıdaki örneği inceleyiniz:
let parent = {
greet: function() {
console.log("Merhaba");
}
};
let child = Object.create(parent);
child.greet(); // "Merhaba"
Bu örneğimiz, prototip tabanlı mirasın temel bir kullanımıdır. Böylece child
objesi, parent
objesinin sahip olduğu tüm metot ve özellikleri miras alır.
⭐ Object.keys()
, bir objenin kendi, yani miras alınmamış özelliklerinin isimlerini (key) bir dizi olarak döndürür. Örneğin:
let person = {
name: "John",
age: 30,
city: "Köln"
};
let keys = Object.keys(person);
console.log(keys); // ["name", "age", "city"]
⭐ Object.values()
, bir objenin kendi, yani miras alınmamış özelliklerinin değerlerini (value) bir dizi olarak döndürür. Örneğin:
let person = {
name: "John",
age: 30,
city: "Köln"
};
let keys = Object.values(person);
console.log(keys); // ["John", 30, "Köln"]
⭐ Object.freeze()
, bir objeyi “dondurur” yani objenin değiştirilmesini önler. Aşağıdaki örneği inceleyiniz:
let car = {
brand: "Toyota",
model: "Corolla",
year: 2020
};
Object.freeze(car);
car.year = 2021; // Bu değişiklik etkili olmayacak.
car.color = "Red"; // Yeni bir özellik eklenemeyecek.
console.log(car); // { brand: "Toyota", model: "Corolla", year: 2020 }
⭐ Object.defineProperty()
, bir objeye yeni bir özellik ekler veya bir objenin mevcut bir özelliğini değiştirir. Bakınız:
let person = {
name: "John"
};
// `age` isimli yeni bir özellik ekliyoruz.
Object.defineProperty(person, 'age', {
value: 25,
writable: true, // Bu özelliğin değeri değiştirilebilir.
enumerable: true, // Bu özellik döngülerde listelenebilir.
configurable: true // Bu özellik silinebilir veya değiştirilebilir.
});
console.log(person.age); // 25
// 'age' özelliğinin değerini değiştirme
person.age = 26;
console.log(person.age); // 26
// 'name' özelliği için sayılabilir özelliğini false yapma
Object.defineProperty(person, 'name', {
enumerable: false
});
console.log(Object.keys(person)); // ["age"] -> 'name' özelliği artık sayılamaz olduğu için listelenmez.
İlk olarak, person
adında bir obje oluşturduk. Ardından, Object.defineProperty()
metodu ile bu objeye age
adında yeni bir özellik ekledik ve bu özelliğe bazı özellik tanımlayıcıları atadık. Daha sonra, person
objesinin name
özelliğinin sayılabilir özelliğini false
olarak ayarladık. Bu da, objenin özelliklerini listelediğimizde name
özelliğinin görünmemesine neden olmuştur.
⭐ Object.setPrototypeOf(obj, prototype)
, metodu, belirli bir objenin prototipini değiştirmek için kullanılır. Bu fonksiyon, ilk parametre olarak hedef objeyi ve ikinci parametre olarak atanacak yeni prototipi alır.
let animal = {
makesSound: function() {
console.log("Some sound");
}
};
let dog = {
bark: function() {
console.log("Woof!");
}
};
// Şu anda 'dog' objesi 'animal' objesini prototip olarak miras almıyor.
console.log(dog.makesSound); // undefined
// 'dog' objesinin prototipini 'animal' olarak ayarla.
Object.setPrototypeOf(dog, animal);
dog.makesSound(); // "Some sound"
Yukarıdaki örneğimizde, öncelikle animal
adında bir prototip objesi ve dog
adında başka bir obje oluşturduk. Ardından, dog
objesinin prototipini animal
objesi olarak değiştirerek dog
objesine makesSound
metodunu miras aldırdık.
⭐ Object.prototype.hasOwnProperty()
, bir objenin belirli bir özelliği olup olmadığını kontrol eder. Aşağıdaki örneği inceleyiniz:
let person = {
name: "John",
age: 25
};
console.log(person.hasOwnProperty('name')); // true
console.log(person.hasOwnProperty('age')); // true
console.log(person.hasOwnProperty('salary')); // false
// Prototip zincirinde bir özellik olup olmadığını kontrol ederken:
let personPrototype = {
salary: 50000
};
Object.setPrototypeOf(person, personPrototype);
console.log(person.hasOwnProperty('salary')); // false
console.log('salary' in person); // true
❗ Object.prototype.hasOwnProperty()
metodu teknik olarak “Object’in” metodu değil, Object.prototype‘un bir metodudur. Ancak “Object’in” tüm örnekleri bu metodu miras aldığından “Object” metodu olarak kabul edilir.