2015-12-25 20 views
5

Ben bir JavaScript kitap okuyordum ve sana prototip tarafından JavaScript dizinin diziler işlevlerini genişletebilirsiniz nasıl okuyordu, o zaman ben anlayamadım bu örneğe geldi ve hiçbir derin açıklama yoktu ve IAM mümkün değildirarguments özelliği this.some_function.arguments tarafından erişilebilir mi? aslında açıklayamıyorum?

burada argümanları erişmek mümkün, ama ben bu nasıl çalıştığını bilmiyorum
Array.prototype.some_function = function(){ 
    var args = this.some_function.arguments;     // 1 
    var args_length = this.some_function.arguments.length;  // 2 
    ... 
} // some_function 

, bu biz (bu bağlamda dizi) bu yöntemi çağıran edildiği nesneye başvurmak anlamına gelir: anlamak , o zaman uyguladıklarını işlevine yani, bu nesnenin özelliği başvurmak some_function, ama sonra argümanlar sonra nasıl çalıştığını fonksiyonun statik özellik değildir? yalnızca bağlamı ararken çalışır, bunu diğer kullanıcılar için kullanamazsınız: -

this.some_other_function.arguments // gives error 
+2

sorgula Bu yanıtı https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/arguments yok mu şu açıklama öğreticidir: "durumda özyinelemeye, yani fonksiyonu f çağrı yığını üzerinde bir kaç kez belirirse, f.arguments değeri fonksiyonun en son çağırma karşılık gelen bağımsız değişkenleri ifade eder." –

cevap

4

Bunun, JavaScript'in onaylanmamış bir özelliği olduğu görülmektedir.

Deprecated

Bu özellik Web standartlarından kaldırılmıştır: diyor MDN: Function.arguments üzerine belgelere bakın. Bazı tarayıcılar hala desteklemesine rağmen düşürüldüğünü edilme sürecindedir. Eski veya yeni projelerde kullanmayın. Kullanarak sayfaları veya Web uygulamaları herhangi bir zamanda kopabilir.

davranış senet beklenmedik bir durumdur. Bu, kullanımdan kaldırılmasının nedeni olabilir. Dediğiniz gibi, işlev statik bir nesnedir, bu yüzden dinamik arguments nasıl olabilir? Sanırım bariz olandan başka bir açıklama yok: JavaScript motoru her aramadan önce işleve arguments değerini atar.

BTW, aynı gösteren basit bir kod vardır:

function f() { return f.arguments; } 
f(8);     // returns [8] 
f(8, 9);    // returns [8, 9] 
f.arguments === null // true 

çözüm, tabii ki, arguments yerine func.arguments yerel değişken kullanın, MDN: arguments bakın. Argümanlar nesne

1

yerel değişken olarak tüm fonksiyonlar için kullanılabilir.
Sen argümanlar işlevi içinde itiraz kullanabilirsiniz ancak instance.arguments bunları erişemez.
Argümanlara function.arguments ile erişmek, şu andan itibaren kullanımdan kaldırılmış olan javascript tarafından sağlanan garip bir özelliktir.
Temel olarak, function.arguments işlevini gerçekleştirdiğinizde, şu anda yığınta çalışmakta olan işlevin argüman değişkeni değerini verir.

var someContructor = function() { 
 
    console.log('someContructors arguments'); 
 
    console.log(arguments); 
 

 

 
    //SomeConstructor is currently in stack executing 
 
    //accessing its arguments by function.arguments 
 
    console.log('someContructors arguments accesed using function.arguments'); 
 
    console.log(someContructor.arguments); 
 
}; 
 

 
someContructor.prototype.method = function() { 
 
    console.log('method arguments'); 
 
    console.log(arguments); 
 
    //method is in stack executing 
 
    //accessing its arguments by function.arguments 
 
    console.log('method arguments accesed using function.arguments'); 
 

 
    console.log(this.method.arguments); 
 

 
}; 
 
var newObject = new someContructor(1, 2); 
 
newObject.method(1, 2, 12, 23, 23, 232, 3);

1

ana JavaScript kavram, bu nedenle bir dizi bir prototip olan bir nesnedir "Her şey sadece bir nesnedir" daha fazla netlik için .. benim kod geçmesi ve konsolları okumayı deneyin ve bir kurucu.yöntem

function Add(a,b) 
{ 
    console.log(this.arguments) // logs an array-like of [a,b] 
    return a+b; 
} 

tanımlanır: bir nesne için bir tesis için bir yöntem olarak adlandırılan

herhangi bir fonksiyon

bir bağımsız değişkeni ex bir işlev içinde geçmesi parametredir, ilan? Sadece başka yöntem özelliklerini erişemez anlamına prototip kapsamı içinde, nereye yöntemini kendisi veya diğer kapsamına yapıcısını geçmesi sürece. Sen özlü Cody Lindley tarafından JavaScript adlı bir kitaba başvurabilirsiniz

, this JavaScript bazı gelişmiş bilgisine ihtiyacı vardır. MDN

Bu özellik gereğince

Web standartlarından kaldırılmıştır. Bazı tarayıcılar hala desteklemesine rağmen düşürüldüğünü edilme sürecindedir. Eski veya yeni projelerde kullanmayın. Kullanarak sayfaları veya Web uygulamaları herhangi bir zamanda kopabilir.

İlgili konular