Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Создание прототипа функции (https://javascript.ru/forum/events/42530-sozdanie-prototipa-funkcii.html)

Chiz 30.10.2013 16:28

Создание прототипа функции
 
В общем я пытаюсь написать функцию имеющюю свои свойства и методы.Вот упрощенный код, который я написал.
var a = function(){
 /* ... код функции ... */
 this.smth();
}

a.prototype = {
 get:function(name){
 return name.toLowerCase();
},
smth:function(){
 /* ... код функции ... */
}
};

var b  = a.get("name");

var func = new a();

Когда вызываю функцию все в порядке, а когда вызываю один из ее методов выдает ошибку. Пожалуйста объясните как нужно работать с прототипами

jsru_ 30.10.2013 16:34

какую ошибку выдает? как вызываешь?

Chiz 30.10.2013 16:41

jsru_, вызываю так
var b  = a.get("name");
выдает TypeError: Object function (){ /* ... код функции ... */ this.smth(); } has no method 'get'

jsru_ 30.10.2013 16:54

попробуй
a.get("name").bind(a);

danik.js 30.10.2013 16:59

Цитата:

Сообщение от Chiz
var b  = a.get("name");

У объекта (функции) a нет свойства get (откуда ему взяться?).
Так зато можно:
a.prototype.get("name");

рони 30.10.2013 17:09

Chiz,
:-?
var a = function(){
 /* ... код функции ... */
 this.n = 0;
 this.smth();
}

a.prototype = {
 get:function(name){
 return name.toLowerCase();
},
smth:function(){
  alert(this.n++)
 /* ... код функции ... */
}
};
var func = new a();
var b  = func.get("NAME");
alert(b);
func.smth();
func.smth();
func.smth();
var c = new a();
c.smth();

Chiz 30.10.2013 20:10

danik.js, а можно как-нибудь сделать, чтобы спокойно вызывать методы объекта без prototype?И писать:
a.get();

Вместо
a.prototype.get();
/* или */
var o = new a();
o.get();

jsru_ 30.10.2013 20:47

var a = function () {}
a.prototype.get = function(name) {
alert(name);
}

var b = new a();

b.get("рони");

danik.js 30.10.2013 22:31

Цитата:

Сообщение от Chiz
а можно как-нибудь сделать, чтобы спокойно вызывать методы объекта без prototype?

Пиши a.get = a.prototype.get = function () {};


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