Създаване на обект в JS


0

Начинаещ съм както в JS, така и въс всички останали езици, и срещнах някои затруднения гледайки някои от лекциите.

Примерно имам следния код:

<html>
<head>
<script language="JavaScript">
</script>
</head>
<body>
<script>
var fname="Yavor";
var lname="Todorov";
var person= {firstname:fname, lastname:lname, getFullName:function pesho(){
return this.firstname + " " + this.lastname;
}};
console.log(pesho());
</script>
</body>
</html>

При пускането на това, получавам съобщение "pesho is not defined" и съответно не ми се принтира Yavor Todorov на екрана, нито каквото и да е било друго. ; ( Освен това при изписването на "this", думата се оцветява в син цвят(демек я засича като запазена), но в момента на слагане на точката след нея цветът й става черен...

Ако примерно напиша this .firstname  (между this и точката има интервал), се засича отново думата, но това не променя крайния резултат - нито console.log отпечатва нещо в конзолата, нито document.write в самата страница.

Пробвах го на Хром и Firefox. като редактор използвах Notepad++




Отговори



0
Пешо е пропърти на person, така че би трябвало да ползваш person.getFullName. Самата ти променлива е person, и към нея имаш "закачени" полетата firstname, lastname и getFullName. JS не прави голяма разлика дали закачаш променлива или функция...

от JulianG (5316 точки)


0
Пробвай като извикваш така ->
person.getFullName() - по този начин извикваш закачената функция на обекта person. Както искаш ти да го направиш само с pesho() е нормално да не работи, защото функцията pesho() не съществува в глобания scope, а е закачена за самия обект person и за да я извикаш трябва трябва да я достъпиш през обекта, демек person.getFullName(). Препоръчвам ти такива неща да си ги тестваш в конзолата на chrome или съответно firefox (отваря се с бутона f12 и се отива на Console) това ти позволява да изпълняваш JS код и е много удобно за тестване на такива прости неща.

от frowstyl (1008 точки)


0

Аз ако съм на твое място бих направил така;

function person(firstName, lastName) { // това е като клас в JS
    return {
        firstName: firstName,
        lastName: lastName,
        fullName: firstName + ' ' + lastName,
    };
};

И можеш да използваш така:

    var gosho = person('Gosho', 'Giorgiev');

    var ivan = person('Ivan', 'Petrov');

    console.log(gosho.fullName);

    console.log(ivan.fullName);

    console.log(ivan.lastName);

Иначе това което искаш да направиш се прави така:

var fname = 'Gosho',
       lname = 'Pavlov';

var person = {
    firstName: fname, 
    lastName: lname, 
    getFullName: function (){
        return this.firstName + " " + this.lastName;
        }
};
console.log(person.getFullName());

За да го извикаш по този начин по които си го написл трябва да го направиш така:

var fname = 'Gosho',
     lastName= 'Pavlov';

var person = function(){
        per = {
            firstname: fname , 
            lastname: lastName, 
            getFullName:function(){
                return this.firstname + " " + this.lastname; 
            }
        }

        return per.getFullName();
    };

console.log(person());


от Dodko (165 точки)


0

Ето така може да си създадеш клас в javascript:

  1. var Person = (function() {
  2.   function Person(fname, lname) {
  3.     this.fname = fname;
  4.     this.lname = lname;
  5.   }
  6.  
  7.   Person.prototype.fullName = function() {
  8.     return this.fname + " " + this.lname;
  9.   };
  10.  
  11.   return Person;
  12.  
  13. })();
  14.  
  15. var p = new Person("Yavor", "Todorov");
  16.  
  17. console.log(p.fullName());

Извикваш го със new, може да му подадеш параметри в конструктора и да му закачаш методи.


от neutrino (3376 точки)