Undefined demesinin nedeni tanımladığınız bir block scope değişkeni sınıfın bir özelliği gibi kullanmanızdan kaynaklanıyor hocam.


function bike() {
var name = "Ninja";
this.maker = "Kawasaki";
console.log(this.name + " " + maker); // undefined Bajaj
// name + this.maker şeklinde olmalı
}

----------------------

maker artık sınıfın bir özelliği olduğu için daha sonradan bu özelliğe ulaşabilir ve onu değiştirebilirsiniz. Ancak name değeri block scope bir değişken olduğu için ona dokunamazsınız.


obj = new bike();
obj.maker = "Bajaj"


Bu adımdan sonra objeyi konsolda yazdırırsanız "Ninja Bajaj" değerini görürsünüz. Muhtemelen bajaj değeri almanızın nedeni funksionu tanımladığınız yer ile çalıştırdığnız yer arasında bu değeri değiştiren yukarıdaki gibi bir kod var.
-----------------------
"this" nesne tabanlı programlamada objeyi temsil eden ve bütün programlama dillerinde kullanılan önceden belirlemiş bir değişkendir. Dolayısıyla javascriptte bütün fonksiyonlar aynı zamanda birer obje olduğu için javascriptte fonksiyonların içinde this kullanabilyorsunuz. Tıpkı es5 (zaten isimsiz fonksiyon gibi tanımlanıyor) ve es6 sınıflarında olduğu gibi.