[JS OOP] Сетване на this.type във function конструктор. Използване на constructor.name?


2

Здравейте колеги.
Имам два въпроса.

Въпрос #1
На някои от лекциите се показваше следното set-ване на type.
(Примера е от демото на AMD-and-RequireJS "3. difining-dependencies")

    var Rect = (function (parent) {
        function Rect(x, y, width, height) {
            parent.call(this, x, y);
            this.width = width;
            this.height = height;
            this.type = 'Rect';
        }
        ...
        return Rect;
    }(Shape));

Вместо да set-ваме

this.type = 'Rect';

и да ползваме например така
var someRect = new Rect(50, 50, 100 75);
console.log(someRect.type);

Може ли да използваме constructor.name?

console.log(someRect.constructor.name);

Или може би вътре във function конструктора да напишем така
this.type = this.constructor.name;

Няма "магически стрингове", а и ми се вижда по пригледно.
Добре ли е да използваме constructor.name или не и защо?

Въпрос #2
При наследяването в същото демо се пропускат тези 2 реда.
        Rect.prototype = new parent();
        Rect.prototype.constructor = Rect;

Защо?




Отговори



0

Мисля че това е отговора на първия въпрос:

http://www.youtube.com/watch?v=0I6U1SlaA0k#t=3385

 

Имай предвид, че демотата не винаги са обрзец на коректност на кода... :) 


от JulianG (5316 точки)


0
Извинявай колега, но мисля че това не отговаря на моя въпрос. Може и аз да не съм задал въпроса си разбираемо, но не виждам кое по-точно отговаря на това, което питам.

от Radvach (357 точки)

0
Предполагам че в демото е останало парче от кода точно от момента, в който Дончо е обяснявал това, към което съм дал линк в тубата. Мисля че в "класическото" създаване на инстанция можеш да ползваш constructor.name без проблем. За втория въпрос... това: Rect.prototype.constructor = Rect; поне за мен е ... необяснимо. JS създава нов rect с конструктора Rect и следователно му е известно че точно Rect е конструктора за rect-ове, така че "ръчно" да му се указва това за мен е безмислено

от JulianG (5316 точки)