Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Объясните про prototype (https://javascript.ru/forum/misc/29140-obyasnite-pro-prototype.html)

noname1990 16.06.2012 21:11

Объясните про prototype
 
В общем есть такая функция:
Function.prototype.method = function ( name, func ) {
        this.prototype[name] = func;
        return this;
    };

  Object.method('showName', function(){
      console.log(this.name)
  });
    var o = {name:'Some'};
    o.showName()

в первой функции method расширяет прототип функции новым методом,
но почему когда мы применяем method к Object, он расширяет Object новым методом, ведь по идее у Objecta нету доступа к methody ?! я походу Жэстачайшэ туплю) объясните плз)

nerv_ 17.06.2012 00:19

Цитата:

Сообщение от noname1990
он расширяет Object новым методом

как уже сказал Maxmaxmахimus,
Цитата:

Сообщение от Maxmaxmахimus
Object это функция

следовательно она наследует от Function.prototype. При этом Object.prototype остается не тронутым.

Function.prototype.method = function( name, func ) {
	this.prototype[ name ] = func;
	return this;
};

alert( 'method' in Object );   // true
alert( 'method' in Array );   // true
alert( 'method' in String );   // true
alert( typeof( Object ) === 'function' );   // true
alert( Object.constructor );
alert( Object.constructor === Function );   // true

alert( 'method' in Object.prototype );   // false

Object.method('showName', function() {
	console.log( this.name );
 });
 
var o = { name:'Some' };
o.showName();

denis_orlov 17.06.2012 14:01

Объясняю...
javascript: ООП, прототипы, замыкания, «класс» Timer.js (http://habrahabr.ru)

denis_orlov 17.06.2012 14:16

Цитата:

Сообщение от Maxmaxmахimus (Сообщение 182010)
очевидно что он думал что Object это не функция, а остальное он знал, вы че, не догоняете?

из телепатов тут единственный - это Вы! будьте же снисходительны!

noname1990 17.06.2012 16:16

спс)т.е если расширяем прототип функций, то и расширяется функция конструктор OBject, я прально понял?


Часовой пояс GMT +3, время: 15:16.