2015-01-02 9 views
5

kod aşağıdaki gibi bir javascript Nesnesi oluşturmak:JavaScript: dize olarak dışarı parantez return'in bütün işlevi olan bir işlev çağırma

var obj={ 
    a : 10, 
    b : 20, 
    add : function(){ 
    return this.a + this.b; 
    }, 
}; 

ben bu kodu obj.add ile işlevini yürütür ve böyle dize olarak tüm işlev döndürecek : -

function(){ 
    return this.a + this.b; 

ama daha sonra ben denemek yeniden obj.add() gibi parantez dahil işlevini çağırmak ve onu ben almak neden ben çözemedim İşte 30. değerini döndürmek böyle dışarı farklı 012 ile işlevini çağırarak üzerine koymakve obj.add()? Nesneleri parantez içinde ve parantez içinde çağırmak arasındaki ana fark nedir?

+2

yapamazsınız * çağrı * Parantez olmayan bir fonksiyondur. '()' Eklemek bir işlevi nasıl çağırırsınız. '()' Olmadan, sadece işlevi kendiniz alırsınız. JavaScript'te, işlevler yalnızca dizeler veya ints veya değişkenler gibi değişkenlerdir. –

+0

'add' [bir' Function' nesnesi] 'dir (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function). Parantez olmadan kullandığınızda, * büyük olasılıkla * arayanın [tip baskısı] aracılığıyla bir "dizgeye" dönüştürülürsünüz (http://stackoverflow.com/questions/19915688/what-exactly-is-type- coercion-in-javascript) – blgt

+0

ama ben dev araçlarda görüyorum ben obj.add arayarak nesne alıyorum, ancak litteral dize. Bunu anlamadım – ambes

cevap

5

olmadan parantez, sen, fonksiyon parantez ile

(yürütme) demiyorsun işlevine bir başvuru alma ediyoruz, sen işlev yürütülürken ediyoruz.

function a() { 
 
    return 2; 
 
} 
 

 
var b = a(); // called a, b is now 2; 
 
var c = a; // c is referencing the same function as a 
 
console.log(c); // console will display the text of the function in some browsers 
 
var d = c(); // But it is indeed a function, you can call c(), d is now 2;

+0

'ifadesini almalısınız' c şimdiki gibi aynı şey değil, referans olarak değil, değere aktarılır. 'C' değişmesi 'a' değişmez, tersi de olmaz. – Shomz

+0

@Shomz Tamam, 'c' şimdi' a' işleviyle aynı işlev nesnesine başvurur. –

3

Sen obj.add ile işlevini yürütmek vermedi, yalnızca nesne ve bir dize olarak işlev işlemek oldu konum ortamda baktım. Parantez ekleyerek bunu yürütürsünüz.

2

Parantez olmadan gerçekten hiçbir şey aramıyorsunuz, ne de bir şey döndürüyorsunuz, sadece referans!

Bunu

var result = ambes.add; 

console.log(result); 

böyle birşey yaptığını tahmin ediyorum ve bu işlevi çağırmaz, bu fonksiyon olduğunu add mülkiyet ait asıl içeriği kaydeder ve günlük Bir işlev, işlevin dizgisi içeriğini kaydeder, çağrıldığın zaman geri dönmeyecek.

+0

Teknik olarak, işlev nesnesinin kendisini döndürüyorsunuz. Daha sonra işlevi yürütmek ve herhangi bir geri dönüş değeri almak için 'result()' diyebilirsiniz. – musicfuel

+0

kodunuz da aynı şekilde sonuçlanır, – ambes

+0

@musicfuel dizgisi olarak tüm işlev - ".. ** işlevi" eklentisi içeriği değil, ".. yazmıştım? – adeneo

1

Oldukça basit: functionName yalnızca işlev gövdesini döndürürken, functionName() işlevi yürütür ve dönüş değerini döndürür (veya açık bir dönüş yoksa undefined). Aynı ilke, bir fonksiyonun obj.add gibi bir nesne özelliği olduğunda işe yarar.

0

Bir işlevin çağrılması, işlev çağırma operatörü olduğu için() gerektirir. Bir işlevi yürütmek için her zaman parantez eklemeniz gerekir.

ambes.add numaralı telefonu aradığınızda, işlev nesnesinin kendisine geri dönersiniz. Bunu console.log() içinde yaparsanız veya bir dizgi üzerine yapıştırırsanız, JavaScript işlevi tanımladığınız ilk çıktıyı açıklayan tam bir dizge olarak döndürür.

0

JavaScript'te bir işlevi çağırmak için() öğesini kullanmalısınız.

Eğer parantez kullanmıyorsanız, işlevi ertelemek için başka bir kod bloğuna iletmek istediğiniz bir durumda yararlı olabilecek işleve başvurmanız yeterlidir.senin durumda

, hemen eklemek aramak istediğiniz çünkü, kullanmak emin olmalıdır()

obj.add(); 
İlgili konular