Vlad
JẹtFightżer
но там this не инициализирован
Serhii
Anonymous
Aleksey
Serhii
зачем
Serhii
в конструкторе уже есть this
Anonymous
он эксперементы делает
Serhii
https://babeljs.io/repl/#?babili=false&evaluate=true&lineWrap=false&presets=es2015%2Ces2015-loose%2Cstage-1%2Cstage-2%2Cstage-3&experimental=true&loose=true&spec=true&code=class%20Test%20%7B%0A%20%20constructor%20()%20%7B%0A%20%20%20%20console.log(this.meth())%3B%0A%20%20%7D%0A%20%20%0A%20%20meth%20()%20%7B%0A%20%20%20%20return%20'Say%20my%20name'%3B%0A%20%20%7D%0A%7D%0A%0Anew%20Test()%3B
Vlad
источник утки про нг3 http://www.infoworld.com/article/3139891/javascript/angular-3-is-hot-on-the-heels-of-angular-2.html
Serhii
proto?
Serhii
https://babeljs.io/repl/#?babili=false&evaluate=true&lineWrap=false&presets=es2015%2Ces2015-loose%2Cstage-1%2Cstage-2%2Cstage-3&experimental=true&loose=true&spec=true&code=class%20Test%20%7B%0A%20%20constructor%20()%20%7B%0A%20%20%20%20console.log(this.meth())%3B%0A%20%20%7D%0A%20%20%0A%20%20meth%20()%20%7B%0A%20%20%20%20return%20'Say%20my%20name'%3B%0A%20%20%7D%0A%7D%0A%0Aconsole.log(Test.prototype.meth())%3B
Anonymous
proto?
ему вызвать нужно, а не внутырь залезть
Serhii
ну вот я вызвал в примере
Sergei
Anonymous
то есть, есть функция внутри конструктора и её вызвать без экземпляра
Serhii
статическую функцию?
Serhii
я што то не допираю, дайте пример на фидле што ли
Serhii
я зафигачу
Anonymous
как тебе пример дадут, если это сделать нельзя
JẹtFightżer
суть в том, что всё немного хитрее и я наследуюсь от Function, без этого иное поведение
Anonymous
:D
Serhii
наследуешься от функции и нету this?
Sergei
мм ну тогда контекст плз сразу, если так))
JẹtFightżer
class A { constructor() { console.log(this) } }
13:10:03.372 undefined
13:10:06.520 new A()
13:10:06.530 Object { }
13:10:06.527 Object { }
13:10:26.672 class B extends Function { constructor() { console.log(this); super() } }
13:10:26.681 undefined
13:10:30.535 new B()
13:10:30.544 ReferenceError: |this| used uninitialized in B class constructor
Serhii
super должен идти перед
JẹtFightżer
нельзя this до super
JẹtFightżer
но если мне надо юзать this в super?
Serhii
у тебя в супер this и так будет екземпляром
Serhii
в конструкторе суперкласа тоесть super () this is a child object extended from parent
Serhii
почитай что такое фн супер вообще
Serhii
subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
Anonymous
но кстати, если я наследую у класса, я забираю все его методы, а раньше я могла только использовать прототипы, хотя мне ответили, что, это фишка классов в других яп
Serhii
все кроме статических
Anonymous
ну офигеть теперь, от этого не легче
Anonymous
ну и в принципе оно и не нужно, использую классы
Serhii
наследование вообще не нужно когда есть екстенд
Serhii
ы
JẹtFightżer
» class A extends Function { constructor() { super("this.x = 4; console.log(this.x)") } }
undefined
» a = new A
function anonymous()
» a()
4
undefined
» a.x
undefined
Anonymous
и ты пишешь одни компоненты
JẹtFightżer
в этом проблема
Serhii
у меня наследование используется очень специфически в проекте - мне лень в this копировать все инжешены ангуляра
Serhii
кеке
Serhii
ты в супер передал стрингу?
JẹtFightżer
туда только стринги и идут
JẹtFightżer
это же Function
Serhii
ну да но
Serhii
ты написал new Function('console.log(1)');
Serhii
у тебя работает?
JẹtFightżer
а чему там не работать?
JẹtFightżer
сделает новую функцию
Serhii
потому что ты не читаешь что такое функция
Serhii
и что возвращает конструктор функции
Serhii
https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Function
JẹtFightżer
конструктор так-то вообще ничего не возвращает
JẹtFightżer
но MDN я перечитал уже давно
Sergei
эт самое
Sergei
скоуп
Sergei
x улетел в глобальный
JẹtFightżer
именно
JẹtFightżer
и это надо как-то побороть
Sergei
ну
Sergei
у функции this же window по дефолту. нужно apply делать
JẹtFightżer
что-то я пока не соображу к чему apply
Serhii
https://babeljs.io/repl/#?babili=false&evaluate=true&lineWrap=false&presets=es2015%2Ces2015-loose%2Cstage-1%2Cstage-2%2Cstage-3&experimental=true&loose=true&spec=true&code=class%20A%20extends%20Function%20%7B%0A%20%20constructor%20()%20%7B%0A%20%20%20%20super('a'%2C%20'b'%2C%20'return%20a%20%2B%20b')%3B%0A%20%20%7D%0A%7D%0A%0Avar%20test%20%3D%20new%20A()%3B%0Aconsole.log(test(1%2C2))%3B
Serhii
вот тебе и 3
Serhii
результатом конструктора есть функция которую нужно вызвать
Serhii
var constructorResult = new A()(1,2);
JẹtFightżer
еп
Sergei
ну так он так и делал
Sergei
ток не сразу вызывал
JẹtFightżer
ну это-то всем известно, а где обращение к this из новосозданного экземпляра?
Serhii
a = new A
Serhii
я только влиаюсь что ты хочешь сделать
Serhii
ты хочешь теперь вызвать зис метод
Serhii
из виндоватак как у фнуции зис нету?
JẹtFightżer
надо чтобы
a = new A()
а потом a() в котром есть доступ к this
JẹtFightżer
по сути что-то вроде перегрузки ()