Pozwala udowodnić oświadczenie corckford za:
„przez zwiększanie Function.prototype z metodą metody, nie longerhave wpisać nazwę właściwości prototyp trochę brzydoty mogą teraz. ukryć się."
Tutaj Crockforda chciał powiedzieć można manipulować Function.prototype osiągnąć wiele różnych funkcjonalności dla Twojego osobistego usage.It jest funkcjonalność dodana do function.prototype aby dodać nową metodę/nieruchomość do dowolnej funkcji .Funkcje w javascript dziedziczą formę Function.prototype.lets rozbijają twój kod.
Function.prototype.method = funkcja (nazwa, func) {
w tej linii Function.prototype dodaje nową metodę method.This otrzymać dwa argumenty. name
satands dla nowej nazwy metody. I func
oznacza jego funkcjonalność. Myślę, że jesteś obeznany z tym, jakie są metody i właściwości. Funkcje są obiektem pierwszej klasy w javascript.So można w nich dodawać nowe właściwości i metody.
this.prototype [nazwa] = func;
Tutaj to odnosi się do funkcji, która nazywa go. [name]
jest nazwa metody i func
jest funkcjonalność tejże metody Dodaje nową metodę funkcji przekazywane użyciu array notation. wreszcie
zwrot ten;
z tym stwierdzeniem funkcja przeszedł jest zwracany z nową metodę dodatkiem do niego.
Tutaj mam praktyczny przykład dla Ciebie:
Function.prototype.method = function (name, func) {
this.prototype[name] = func;
return this;
};
function Myfunction(){ // a constructor function called Myfunction
this.name='robin'; // it has a name property
}
Myfunction.method('mymethod',function(){ console.log(' i am available')}); //adds a method named 'mymethod to Myfunction constructor
var newObj=new Myfunction(); // creates a new instance of Myfunction class
console.log(newObj.mymethod()); //calls mymethod() of newObj
Tutaj myfunction
jest constructor.We można dodać dziedziczone metody prototypu tego konstruktora usind Myfunction.prototype.mymethod=function(){ ..}
Jeśli używasz myfunction jako a Konstruktor to sposób w jaki dodajesz do niego metodę. Ale ponieważ dodałeś nową funkcjonalność do Funkcja.Prototyp, można po prostu nazwać jak
Myfunction.method('mymethod',function(){console.log('i am available'}); //it will add a method named mymethod to Myfunction's prototype
tym stwierdzeniem doda nową metodę o nazwie mymethod
do Myfunction()'s prototype
niejawnie.
więc nie nie napisać Myfunction.prototype.mymethod=function(){ console.log('i am available');
.Instead można napisać Myfunction.method('mymethod',function(){ console.log('i am available'});
Więc okazuje będzie zwalnia Cię od pisania Myfunction.prototype
ponownie i ponownie za każdym razem chcesz dodać nowe metody Konstruktor Myfunction.
To potwierdza oświadczenie crockford: .
Dotykanie prototypu czegoś, czego nie jesteś właścicielem, to okropny pomysł (otwierasz drzwi do wszelkiego rodzaju konfliktów). Jest to zdumiewająco nierozważna odrobina lenistwa ze strony Crockforda. – ssube
Wprowadzana tam "poprawa" nie ma tak naprawdę praktycznego znaczenia; Myślę, że to raczej przykład nauczania. – Pointy
@ssube: Crockford "źle poinformowany"? Meh. jeśli to jest problem, pokaż nam, zamiast mówić nam ... – dandavis