Определение класса Javascript - PullRequest
       5

Определение класса Javascript

1 голос
/ 17 августа 2010

Когда функция myClass возвращает одну строку "hii", testClass.getDetails() работает нормально:

function myClass(name, age) {
    this.name = name;
    this.age = age;

    return "hii";
}
myClass.prototype.getDetails = function() {
    return "mydetails";
}

var testClass = new myClass('aneesh', 27);
alert(testClass.getDetails());

Но когда я возвращаю объект в myClass:

function myClass(name, age) {
    this.name = name;
    this.age = age;
    return {};
}

Я получаю сообщение об ошибке:

testClass.getDetails не является функцией

Почему это происходит?В Javascript строка также является объектом, верно?

Ответы [ 2 ]

0 голосов
/ 17 августа 2010

Это потому, что конструкторы:

  • автоматически возвращает новый объект this, если не указан возврат вручную
  • возвращает другой объект по вашему выбору, если возвращен вручную

Однако вы не можете вручную вернуть примитивное значение из объекта, например, необработанную строку, число или логическое значение. Вы можете обойти это, обернув объектное значение таким образом, что это фактически объект String:

return new String("hii");
0 голосов
/ 17 августа 2010

Нет, строковый литерал, подобный тому, который вы возвращаете ("hii"), является примитивным значением не является объектом.

В JavaScript у нас есть следующие примитивы: строка,число, логическое, неопределенное и нулевое.

Если конструктор, используемый с оператором new, возвращает примитив, будет возвращено значение this.

Если объект возвращается, например,во втором примере (который IMO не очень полезен) вновь созданный объект (this в конструкторе) будет потерян, и вы получите ошибку, поскольку он не содержит свойства с именем getDetails.

Например:

function Test () {
  // don't return anything (equivalent to returning undefined)
}

new Test() instanceof Test; // true

function Test2 () {
  return {};
}

new Test2 instanceof Test2; // false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...