Я создал функцию конструктора в 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())
Я даже попытаюсь с этим и получил ту же ошибку
Чтобы правильно понять ваш вопрос, вам нужно знать возвращаемое значение функции.
(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 ... '
getName
выведет "My name is undefinedand i am undefinedold"
- удалите все this
ссылки и используйте let / vars
Во втором случае 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()());
new
,this
будет привязано кwindow
.