Стремлюсь узнать как этот же код на c# написать на js. Я закомментил все что должно быть переведено в код на js.
Надеюсь сообществу и мне будет полезно знать как правильно реализовать полноценный класс.
public class Men // класс
{
public string Name { get; set; } // публичное свойство
private int Age; // приватное поле
public Men(string Name) // конструктор
{
this.Name = Name; // заполнение поля объекта
}
public void SayHi() // публичный метод
{
Console.WriteLine("Hi"); // это можно не писать
Men men = new Men("Alex"); // создание экземпляра класса самого себя
}
}
Приватных полей нет, всё публичное. В остальном (при использовании ES5) так:
var Man = (function () {
function Man(name) {
console.log("Creating " + name);
this.name = name;
}
Man.prototype.sayHi = function () {
console.log("Hi from " + this.name);
var man = new Man("Alex");
};
return Man;
})();
var x = new Man("Abc");
x.sayHi();
Пример на старых prototype:
var Men = function(name, age) {
this.name = name;
if(age!=null && !(age==='undefined'))
this.age = age;
};
Men.prototype.name = null;
Men.prototype.SayHi = function(){
console.log("Hi " + this.name + " [you age "+this.age+"]");
};
Создание и вызов:
let instance1 = new Men("Вася",24);
instance1.SayHi();
let instance2 = new Men("Петя");
instance2.SayHi();
Например так:
var men = (name) => {
if(!name) {
return null;
}
var privateName = 'Alex';
class Men {
constructor(name) {
this.name = name;
}
getPrivateName() {
return privateName;
}
getPublicName() {
return this.name;
}
}
return new Men(name);
}, run = men('Lex');
Так:
function Men(name) {
if (!name) {
return null;
}
var privateName = 'Alex';
this.name = name;
this.getPrivateName = function () {
return privateName;
};
this.getPublicName = function () {
return this.name;
};
return this;
}
run = new Men('Lex');
Или так:
var Men = function (name) {
if (!name) {
return null;
}
var privateName = 'Alex';
this.name = name;
this.getPrivateName = function () {
return privateName;
};
this.getPublicName = function () {
return this.name;
};
return this;
}, run = Men('Lex');
Дадут одинаковый результат:
console.log(run.getPrivateName(), run.getPublicName(), run.name, run.privateName);
// Alex Lex Lex undefined
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости