Подтвердить что ты не робот

Как создать метод в объектной литературе?

Я начал веб-программирование всего на 13 дней на Codeacademy.com и нашел, что это хорошее место для изучения. Но я все еще иногда неправильно понимаю вещи. Я всегда проверяю их на w3school.com, но на этот раз я не смог найти нужную мне информацию. Так как я узнал, есть два типа создания объектов: Object literal notation и second: Object constructor. Я узнал, что есть также методы и функции, но я не мог понять, как создать метод в объектной литературе? В конструкторе объектов я просто пишу: `

var bob = new Object();
bob.age = 30;
bob.setAge = function (newAge)
{
bob.age = newAge;
};

Не могли бы вы рассказать мне, как сделать то же самое при записи объектной литералы.

var bob = {
age: 30
};
4b9b3361

Ответ 1

Синтаксически это изменение очень просто:

var bob = {
  age: 30,
  setAge: function (newAge) {
    bob.age = newAge;
  }
};

Но, как вы видите, возникает проблема: как в вашем коде используется внешняя переменная bob, поэтому это не сработает, если вы измените значение переменной bob.

Вы можете исправить это с помощью

var bob = {
  age: 30,
  setAge: function (newAge) {
    this.age = newAge;
  }
};

Обратите внимание, что на этом этапе вы должны проверить, действительно ли то, что вам нужно, класс, что приведет к некоторым улучшениям производительности если у вас несколько экземпляров.

Обновление: ECMAScript 6 теперь позволяет определять методы одинаково независимо от того, находятся ли они в литерале объекта:

var bob = {
  age: 30,
  setAge (newAge) {
    this.age = newAge;
  }
};

Ответ 2

Не имеет ничего другого и легкого, как

var bob = {
    age:     30,
    setAge:  function( newAge ) {
        this.age = newAge;
    }
};

В качестве альтернативы вы можете создать реальную функцию setter, вызвав Object.defineProperty() или так же просто, как

var bob = {
    age:       30,
    firstName: 'j',
    lastName:  'Andy',
    set setName( newName ) {
        var spl = newName.split( /\s+/ );
        this.firstName = spl[ 0 ];
        this.lastName  = spl[ 1 ];
    }
}

Где вы могли бы пойти как

bob.setName = "Thomas Cook";  // which sets firstName to "Thomas" and lastName to "Cook"

Ответ 3

В последнем коде, который вы отправили, отсутствует запятая. Кроме того, вам не нужен ';' после определения функции свойства объекта. Вот так:

var object2 = {
name: "Fred",
age: 28,
club: "Fluminense",
bio2: function (){
    console.log(this.name +" is "+ this.age + " years old and he is playing in "+             this.club);
    }
};

Ответ 4

Это способ решить это упражнение с использованием метода создания литерала:

var setAge = function (newAge) {
  this.age = newAge;
};

var bob = new Object();
bob.age = 30;
bob.setAge = setAge;

var susan = {
    age: 25,
    setAge: setAge
}

susan.setAge(35);

Ответ 5

Вот так:

var bob = {
    age: 30,
    setAge: function (age) {
        this.age = age;
    }
}
alert(bob.age); // 30
bob.setAge(45); // set age = 45
alert(bob.age); // 45

Ответ 6

Если вы хотите инкапсулировать, вы можете использовать следующий синтаксис (self-executing function). Здесь возраст недоступен снаружи объекта bob.

var bob = (function() {
    //...private
    var age = 30;

    function setAge(newAge) {
        age = newAge;
    };

    function getAge() {
            return age;
        }
    // Public api
    return {
        setAge: setAge,
        getAge: getAge
    }
}());
bob.setAge(50);
alert(bob.getAge());

jsfiddle: http://jsfiddle.net/61o9k98h/1/