Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как создать объект? (https://javascript.ru/forum/misc/43792-kak-sozdat-obekt.html)

hrundel 20.12.2013 20:43

Как создать объект?
 
Есть простой класс:
var myclass = {
	property1: "20"
	myfunc=function(){alert();}
}


Как можно создать объект этого класса? Я делаю так:
var myobj = new myclass();
myobj.property1="30";

Но мне выдаётся ошибка: Ошибка: TypeError: myclass is not a constructor

Как сделать правильно?

Vlasenko Fedor 20.12.2013 21:04

var myclass = {
        property1: function (x) {
          this.property1 = x;
          return this.property1;
        },
        myfunc: function () {
          alert(this.property1);
        }
      };
      var myobj = myclass;
      myobj.property1 = 30;
      myobj.myfunc();

      var best = function () {
          this.property1 = function (x) {
            this.property1 = x;
            return this.property1;
          }
          this.myfunc = function () {
            alert(this.property1);
          }
        };
      var myNew = new best;
      myNew.property1 = 10;
      myNew.myfunc();

в js нет классов. Объекты

danik.js 20.12.2013 21:06

Здравствуйте!

Судя по вашему сообщению, вы ну совсем не знаете javascript.

Освойте основы языка и вопрос отпадет сам, полностью или частично.
А с чем не справитесь - поможем.

На сайте javascript можно начать изучать с учебника, раздел Основы javascript.
Возможно, вам также понадобится HTML - учебник есть, например, здесь: http://ru.html.net/tutorials/html/

Задавайте конкретные вопросы по ходу дела.

kobezzza 20.12.2013 21:09

Для вашего случая:
var myobj = Object.create(myclass);


ИЛИ

var myobj = {__proto__: myclass};


(свойство __proto__ стандартизировано в ECMAScript6 и работает во всех современных браузерах)


Или вариант с конструктором:
function myclass() {}

myclass.prototype.property1 = '20';
myclass.prototype.myfunc = function () { alert(); };

var myobj = new myclass();


PS: myclass - это анонимный объект у вас, а не класс. Рекомендую ознакомится http://learn.javascript.ru/prototype

danik.js 20.12.2013 21:13

Цитата:

Сообщение от Poznakomlus
в js нет классов. Объекты

Верней сказать - конструкторы и прототипы.

// Конструктор принято записывать с большой буквы
function ReallyBest(property) {
    this.property1 = property;
}

// Методы принято выносить в прототип
ReallyBest.prototype.myFunc = function() {
    alert(this.property1);
};

// При вызове конструктора принято ставить скобки, даже если нет аргументов
var instance = new ReallyBest(30);
instance.myFunc();

kobezzza 20.12.2013 21:16

Цитата:

Сообщение от Poznakomlus (Сообщение 288103)
в js нет классов. Объекты

В ECMAScript6 добавили сахарную обёртку над прототипами, в виде class
что нового в ECMAScript6

class Animal {
    constructor(name) {
        this.name = name;
    }

    sayName() {
        console.log(this.name);
    }
}

class Dog extends Animal {
    constructor(name) {
        super(name);
    }

    bark() {
        console.log("Woof!");
    }
}

danik.js 20.12.2013 21:19

Цитата:

Сообщение от hrundel
myclass is not a constructor

myclass is not a constructor -> гугл транслейт -> MyClass не является конструктором -> js конструктор -> гугл поиск -> http://javascript.ru/tutorial/object/inheritance (вторая ссылка, но и первая сгодилась бы - http://habrahabr.ru/post/119391/)

Неужели слишком сложная цепочка?

hrundel 21.12.2013 07:33

Всем спасибо, в том числе за полезные ссылки. Этот код то что нужно.
var myobj = Object.create(myclass);


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