2010-01-24 16 views
15

prototip kütüphane kullanmadan tüm javascript fonksiyonları için bir yöntem eklemek için bir yolu var mı? çizgisindejavascript tüm fonksiyonlara prototip ekleme

şey:

Function.prototype.methodName = function(){ 


    return dowhateverto(this) 

}; 

bu şimdiye kadar çalıştı ama işe yaramadı şeydir. Belki de kötü bir fikirdir, eğer öyleyse lütfen nedenini söyler misiniz?

yüzden fonksiyonları bir dizi ekleyebilirsiniz eğer i seçmek

gibi bir şey

:

size

+0

http://www.packtpub.com/article/using-prototype-property-in-javascript – jjj

+1

yap-JavaScript nesneleri kötü uygulamadır genişletilmesi. – jerone

cevap

25

Elbette. Fonksiyonlar nesnelerdir:

var foo = function() {}; 

Function.prototype.bar = function() { 
    alert("bar"); 
}; 

foo.bar(); 

değiştirme "bar"

+0

Bu kod parçacığı foo' önce, ya da başka ilan edilmiştir 'varsayar' foo' zımni küresel (kötü!) 'Dir. Belki de iyi uygulamayı güçlendirmek için beyanname ifadesini “var foo = function() {};” olarak değiştirin. –

+0

Eh, temel nesnelerin prototipini değiştirmek için tam olarak iyi bir stil değil. Ama ben aynı fikirde. – troelskn

1
function one(){ 
    alert(1); 
} 
function two(){ 
    alert(2); 
} 

var myFunctionNames = ["one", "two"]; 

for(var i=0; i<myFunctionNames.length; i++) { 
    // reference the window object, 
    // since the functions 'one' and 'two are in global scope 
    Function.prototype[myFunctionNames[i]] = window[myFunctionNames[i]]; 
} 


function foo(){} 

foo.two(); // will alert 2 
teşekkür MyFunctions işlev adlarının bir dizidir

MyFunctions.prototype.methodName = function(){ 


    return dowhateverto(this) 

}; 

1

uyarmak Will JS yerleşik nesneler bazı sürprizler verebilir.
Harici kütüphaneleri eklemek veya bunlardan birinin versiyonunu değiştirerek varsa, bunlar uzantısı üzerine olmayacağından emin değiliz.

Object.prototype.methodName = function(){ 

    return dowhateverto(this) 
}; 

Ama aynı zamanda yerli nesneleri uzanan her zaman iyi bir fikir olmadığını uyarı kulak:

+0

Bağlantınız öldü. – luckydonald

+0

@luckydonald, yorum için teşekkürler – Mic

1

yerine Object.prototype deneyin.

Function.prototype gerçekten JavaScript güvenilir manipüle edilemez; Bu gerçek bir nesne değildir, çünkü Function() yapıcısının bir nesneyi değil, bir işlevi döndürmesi gerekir. Ancak, normal bir işlev gibi davranamazsınız. Onun 'özelliklerine' erişmeye çalıştığınızda onun davranışı tanımsız olabilir ve tarayıcılar arasında değişebilir. Ayrıca bkz. this question.

İlgili konular