JavaScript'te çağrı ile uygulama arasındaki farkı anlamak

JavaScript'te çağrı ile uygulama arasındaki farkı anlamak
JavaScript'te çağrı ile uygulama arasındaki farkı anlamak

JavaScript'te İşlev Çağırma Yöntemleri

JavaScript'te işlevler çeşitli yollarla çağrılabilir ve yaygın olarak kullanılan iki yöntem "call" ve "apply"dir. Bu yöntemler, işlevin yürütüldüğü bağlamı ("bu" değer) kontrol etmenize olanak tanır. 'Çağrı' ve 'uygulama' arasındaki farkı anlamak, verimli ve etkili JavaScript kodu yazmak için çok önemlidir.

Bu makale, bir işlevi çağırırken "Function.prototype.call()" ve "Function.prototype.apply()" arasındaki farkları araştırıyor. Sözdizimlerini, kullanım örneklerini ve potansiyel performans farklılıklarını inceleyeceğiz. Bu makalenin sonunda, ne zaman "uygula" yerine "çağrı"yı kullanacağınızı ve bunun tersini net bir şekilde anlayacaksınız.

Emretmek Tanım
Function.prototype.call() Belirli bir bu değere ve bağımsız olarak sağlanan bağımsız değişkenlere sahip bir işlevi çağırır.
Function.prototype.apply() Verilen bu değere ve dizi olarak sağlanan bağımsız değişkenlere sahip bir işlevi çağırır.
this Dinamik bağlam atamasına izin vererek işlevin çağrıldığı nesneyi ifade eder.
console.log() Hata ayıklama amacıyla mesajları veya değişkenleri konsola yazdırır.
res.writeHead() Bir Node.js sunucusundaki HTTP durum kodunu ve yanıt başlıklarını ayarlar.
res.end() Tüm verilerin gönderildiğini bildirerek Node.js sunucusundaki yanıt sürecini sonlandırır.
http.createServer() Node.js'de, gelen istekleri dinleyen bir HTTP sunucusu örneği oluşturur.
listen() HTTP sunucusunu başlatır ve belirtilen bağlantı noktasını dinlemesine olanak tanır.

JavaScript'te çağrı ve uygulama kullanımının anlaşılması

Sağlanan komut dosyaları, kullanım arasındaki farkları göstermektedir. Function.prototype.call() Ve Function.prototype.apply() JavaScript'te. Her iki yöntem de belirli bir işleve sahip işlevleri çağırmak için kullanılır. this bağlam. İlk örnekte, call() çağırmak için kullanılan yöntem fullName farklı nesneler üzerinde yöntem (person1 Ve person2), her nesnenin özelliklerini ayrı bağımsız değişkenler olarak iletmek. Bu yöntem, bağımsız değişkenlerin sayısı bilindiğinde ve sabitlendiğinde kısa bir sözdizimine izin verir. İkinci örnek, kullanımı göstermektedir. apply() yöntemine benzer bir yöntem call() ancak bireysel argümanlar yerine bir dizi argüman alır. Bu esneklik, özellikle argüman sayısı değişken olduğunda veya bir dizi kaynağından geldiğinde kullanışlıdır.

Node.js arka uç örneğinde, call() yöntemi, oluşturulan bir HTTP sunucusunda kullanılır. http.createServer(). Bu örnek, this bağlam, HTTP isteklerine dinamik olarak yanıt vermek için sunucu tarafı JavaScript'te değiştirilebilir. Sunucu, sunucunun nasıl çalıştığını gösteren bir selamlamayla yanıt verir. call() yöntem bağlamı değiştirebilir greet işlev. Son olarak, birleştirilmiş ön uç ve arka uç örneği, her ikisinin de nasıl olduğunu gösteriyor call() Ve apply() daha dinamik bir fonksiyonda kullanılabilir. Kullanarak call() Bireysel argümanlarla ve apply() Betik, bir dizi argümanla dinamik olarak kullanıcı ayrıntılarını oluşturarak bu yöntemlerin hem istemci hem de sunucu tarafı JavaScript geliştirmedeki pratik uygulamalarını gösterir.

İşlev Çağırma için JavaScript'te çağrı ve uygulama Yöntemlerini kullanma

JavaScript Ön Uç Komut Dosyası

// Example 1: Using Function.prototype.call()
const person = {
    fullName: function() {
        return this.firstName + " " + this.lastName;
    }
};
const person1 = {
    firstName: "John",
    lastName: "Doe"
};
const person2 = {
    firstName: "Jane",
    lastName: "Smith"
};
// Call the fullName method on person1 and person2
console.log(person.fullName.call(person1)); // Output: John Doe
console.log(person.fullName.call(person2)); // Output: Jane Smith

Esnek Argüman Aktarımı için Function.prototype.apply() işlevinin uygulanması

JavaScript Ön Uç Komut Dosyası

// Example 2: Using Function.prototype.apply()
const person = {
    fullName: function(city, country) {
        return this.firstName + " " + this.lastName + ", " + city + ", " + country;
    }
};
const person1 = {
    firstName: "John",
    lastName: "Doe"
};
const person2 = {
    firstName: "Jane",
    lastName: "Smith"
};
// Apply the fullName method with arguments on person1 and person2
console.log(person.fullName.apply(person1, ["New York", "USA"])); // Output: John Doe, New York, USA
console.log(person.fullName.apply(person2, ["London", "UK"])); // Output: Jane Smith, London, UK

Node.js Arka Uç Örneği Çağrı ve uygulamayı kullanma

Node.js ile JavaScript Arka Uç Komut Dosyası

// Load the required modules
const http = require('http');
// Create a server object
http.createServer((req, res) => {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    // Example using call()
    function greet() {
        return 'Hello ' + this.name;
    }
    const user = { name: 'Alice' };
    res.write(greet.call(user)); // Output: Hello Alice
    res.end();
}).listen(3000);
console.log('Server running at http://localhost:3000/');

Çağrı ve başvuruyu Dinamik İşlevle birleştirme

JavaScript Tam Yığın Komut Dosyası

// Define a function to display user details
function displayDetails(age, profession) {
    return this.name + " is " + age + " years old and works as a " + profession + ".";
}
// User objects
const user1 = { name: 'Bob' };
const user2 = { name: 'Alice' };
// Use call to invoke displayDetails
console.log(displayDetails.call(user1, 30, 'Engineer')); // Output: Bob is 30 years old and works as a Engineer.
// Use apply to invoke displayDetails
console.log(displayDetails.apply(user2, [28, 'Doctor'])); // Output: Alice is 28 years old and works as a Doctor.

JavaScript'te Bağlam Manipülasyonunu Keşfetmek

Temel kullanımın ötesinde call() Ve apply(), bu yöntemler daha karmaşık ve güçlü kod oluşturmak için diğer JavaScript özellikleriyle birleştirilebilir. Örneğin, sıklıkla aşağıdakilerle birlikte kullanılırlar: bind()belirtilen bir değerle yeni bir işlev döndüren this değer. Farklı call() Ve apply()işlevi hemen çağıran, bind() Daha sonra tutarlı bir bağlamla çağrılabilecek bağlı bir işlev oluşturmak için kullanılabilir. Bu, özellikle bir işlevin, farklı ortamlarda yürütüldüğünde bile belirli bir nesnenin bağlamını koruduğundan emin olmak isteyebileceğiniz olay işlemede kullanışlıdır.

Bir başka gelişmiş kullanım örneği, bir nesneden diğeriyle birlikte kullanılmak üzere ödünç alınan yöntemleri içerir. Bu kullanılarak başarılabilir call() veya apply() bir yöntemi geçici olarak farklı bir nesneye bağlamak için. Örneğin, dizi yöntemleri gibi slice() veya push() ödünç alınabilir ve işlevlerdeki argümanlar nesnesi gibi dizi benzeri nesnelere uygulanabilir. Bu teknik, yöntemlerin farklı nesneler arasında çoğaltılmadan paylaşılmasına olanak tanıdığından kodun daha fazla esnekliğe ve yeniden kullanılabilirliğine olanak tanır.

JavaScript'te çağrı yapma ve başvurma hakkında Sık Sorulan Sorular

  1. arasındaki temel fark nedir? call() Ve apply()?
  2. Temel fark şudur call() argümanların bir listesini kabul ederken apply() bir dizi argümanı kabul eder.
  3. Ne zaman kullanmalısınız? apply() üzerinde call()?
  4. Kullanmalısın apply() bir dizi argümanınız olduğunda veya bir işleve değişken sayıda argüman aktarmanız gerektiğinde.
  5. Arada performans farkları var mı? call() Ve apply()?
  6. Genel olarak aralarında önemli bir performans farkı yoktur. call() Ve apply(). Herhangi bir fark genellikle ihmal edilebilir düzeydedir.
  7. Olabilmek apply() Matematik yöntemleriyle birlikte kullanılabilir mi?
  8. Evet, apply() gibi Math yöntemlerine bir dizi sayı aktarmak için kullanılabilir Math.max() veya Math.min().
  9. Nedir Function.prototype.bind()?
  10. bind() çağrıldığında kendine ait yeni bir işlev yaratır. this anahtar kelime, yeni işlev çağrıldığında sağlanan herhangi bir argümandan önce verilen bir argüman dizisi ile sağlanan değere ayarlanır.
  11. Nasıl olabilir call() ödünç alma yöntemleri için kullanılabilir mi?
  12. Kullanabilirsiniz call() Yöntemleri bir nesneden ödünç almak ve bunları başka bir nesnede kullanmak, işlevi kopyalamadan yöntemin yeniden kullanılmasına izin vermek.
  13. Kullanmak mümkün mü call() veya apply() inşaatçılarla mı?
  14. Hayır, yapıcılar doğrudan çağrılamaz call() veya apply(). Bunun yerine şunları kullanabilirsiniz: Object.create() miras kalıpları için.
  15. Dizi benzeri nesneler nedir ve nasıl yapılır? call() Ve apply() onlarla mı çalışıyorsun?
  16. Dizi benzeri nesneler, uzunluk özelliğine ve dizinlenmiş öğelere sahip nesnelerdir. call() Ve apply() bu nesneleri sanki dizilermiş gibi değiştirmek için kullanılabilir.

JavaScript'te çağrı ve uygulama kullanımının özetlenmesi

JavaScript'te, call() Ve apply() kontrol edilmesi açısından önemlidir this işlevler içindeki bağlam. call() bireysel argümanların iletilmesine izin verir, bu da onu bilinen ve sabit argümanlar için uygun hale getirir. Tersine, apply() değişken argüman listeleri için esneklik sağlayan bir dizi argüman alır. Her iki yöntem de, ister ön uç geliştirmede ister Node.js ortamlarında olsun, kodun yeniden kullanılabilirliğini ve dinamik işlev çağrısını geliştirir. Bu yöntemlerin ne zaman ve nasıl etkili bir şekilde kullanılacağını anlamak, temiz ve verimli JavaScript kodu yazmak için çok önemlidir.