Могу ли я вызвать функцию конструктора в JavaScript?

1

Я создал функцию конструктора в javascript

function hello () {
    name = 'shahin';
    age= 22;
    mesg = function () {
        return 'My name is ' + this.name + 'and i am '+ this.age + 'old';
    }
}

console.log(hello.mesg());

и вместо этого создав из него новый конструктор, я просто хотел, работает ли он как нормальная функция или нет. поэтому попробуйте с консолью и увидите эту ошибку: "TypeError: hello.mesg не является функцией.

'

function hello () {
    this.name = 'shahin';
    this.age= 22;
    this.mesg = function () {
        return 'My name is ' + this.name + ' and i am '+ this.age + ' years old';
    }
}

console.log(hello.mesg())

Я даже попытаюсь с этим и получил ту же ошибку

  • 4
    Ваш первый просто создает кучу глобальных переменных.
  • 0
    Если вы вызываете функцию конструктора без ключевого слова new , this будет привязано к window .
Теги:

2 ответа

1

Чтобы правильно понять ваш вопрос, вам нужно знать возвращаемое значение функции.

(function(){
    var a = 1;
})();

Это возвращает undefined, так как нет никакого возвращаемого значения.

(function(){
    var b = 2;    
    return b;
})();

Это, очевидно, возвращает b.

Вы можете отличить разницу? Итак, случай # 1 и случай # 2, функция hello не указывает ничего как возвращаемое значение, поэтому он возвращает undefined, и вы не сможете получить доступ к методу mesg.

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

function hello() {
    var name = 'shahin';
    var age= 22;
    var mesg = function () {
        return 'My name is ' + name + 'and i am '+ age + ' old';
    };

    return {
        getName: mesg
    };
}

var func = hello();
func.getName(); // print 'My name is ... '
  • 1
    getName выведет "My name is undefinedand i am undefinedold" - удалите все this ссылки и используйте let / vars
  • 1
    Ой, извините :) Спасибо, я отредактировал!
Показать ещё 2 комментария
0

Во втором случае mesg - это переменная экземпляра hello, вам нужно вызвать ее путем создания экземпляра с помощью нового оператора.

console.log((new hello()).mesg())

В первом случае вы не можете вызывать mesg как свойство. Вы вызываете mesg только в том случае, если вы возвращаете функцию mesg

function hello () {
    name = 'shahin';
    age= 22;
    return mesg = function () {
        return 'My name is ' + this.name + 'and i am '+ this.age + 'old';
    }
}
console.log(hello()());
  • 1
    Не в первом случае это не
  • 1
    Это не свойство прототипа в любой версии.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню