JavaScript

создание обьектов через new

function Obj (name,sname) {
this.fname;

this.concat = function(){
this.fname = name + " " + sname;
}
this.fullname = function(){
console.log(this.fname);
}
}

var o = new Obj("Sancho","Panco");
o.fullname();

почему в итоге в консоли undefined ?
чем отлчиается в функции - конструкторе обьявления переменных this.fname; или же var fname;
и собственно то же самое с функциями, в чем отличие? this.concat = function() или же var concat = function() //кстати так выдает ошибку.
this.fname; - не определена
ВУ
Вуди Урлицер
20 058
Лучший ответ
Я точно не знаю, какой в JS синтаксис, но можно попробовать перед названием объекта поставить звёздочку (*).
var *o = new Obj();
o->fullname(); // и обращаться к методу объекта, через стрелочку, а не точку. Это же не статический объект.
Владимир Мачихо к сожалению js очень отличается от сипп)
дело в том что когда пишешь это...

--------------------------------------------
function Person(name, age) {
this.name = name || 'Islam';
this.age = age || 25;
}
-------------------------------------------

...на самом деле происходит следующее...

--------------------------------------------------------

function Person(name, age) {
var this = {} // неявно создаётся объект this

this.name = name || 'Islam';
this.age = age || 25;

return this; // неявно возвращается объект this
}

вот и вся магия. надеюсь многое стало понятно
вообще все неправильно, вам бы еще про конструкторах и деструкторах почитать а то из кода понятно, что знания в этом вопросе хромают.
Кроме того, вы вызываете атрибут, еще не определив его.
логику я примерно понял, вот вам пример

function Obj (name,sname) {
this.name = name;
this.sname = sname;
this.fname = "";

this.concat = function(){
this.fname = this.name + " " + this.sname;
}
this.fullname = function(){
console.log(this.fname);
}
}

var o = new Obj("Sancho","Panco");
o.concat();
o.fullname();

Вариант 2:
function Obj (name,sname) {
this.fname = name + " " + sname;

this.fullname = function(){
console.log(this.fname);
}
}

var o = new Obj("Sancho","Panco");
o.fullname();