[JS] Валидация - Как да проверя дали аргумент е функция-конструктор


1

Как мога да проверя дали подаден аргумент е функция конструктор?

(тоест е написан с идеята да бъде използван с ключовата дума "new" и да връща инстанция на себе си)

function doSomething (argument) {
 if(checkIfArgIsAConstructor(argument)) {
  // my code
 }
}

function checkIfArgIsAConstructor (argToCheck) {
 // Validation
}

Трябва ми самата валидация.
Мога просто да напиша "return argToCheck instanceof Function;" но това надали ще е достатъчно. Друг вариант е да опитам да създам нов обект и да проверя дали този обект е инстанция на родителя, но това няма да бачка винаги, тъй като някои конструктори ще хвърлят ексепшъни когато им не им подам никакви аргументи, или им подам нещо невалидно.
Трябва ми трети начин.




Отговори



0
Ами това ще бъде доста голяма валидация според мен. Това, за което се сещам е да декомпилираш функцията и да си направиш поверки:
1. дали името е с главна буква
2. да извлечеш параметрите на функцията и да провериш дали в нея се закача някои от тези параметри към 'this'
3. да провериш дали има return във функцията, ако пък има трябва и да провериш дали не прави 'return new FunctionConstructorName(....)' и се опитва да се предпази от извиквания без new
Вероятно можеш да се направят и проверки за още неща, но мисля че тези биха означавали, че е функция конструктор.

от lostm1nd (846 точки)


0
Да, но всяко от тях важи "почти" винаги, а не винаги. При кое от тях ще съм достатъчно сигурен за да върна true от валидирането?

от lokiko91 (790 точки)

0
И при трите заедно. Както казах, ако се сещаш и за други може да си ги добавиш.

от lostm1nd (846 точки)



0
привет, с каква цел ти трябва това .Този код в конструктора подсигурява викането на функцията само с new:
if (!(this instanceof arguments.callee)) {
return new objectname(name, age);
}

от RumenTonev (336 точки)


0
имам функция конструктор, с която работя в модулчето си. Искам да може да й се подаде родител и при това подаване да става така че функцийката да наследи родителя. Преди това обаче искам да валидирам този родител.

от lokiko91 (790 точки)

0
Хм,интересно аз си мислех че наследяването върви наобратно-от родител към наследник. Ако го обърнеш наобратно ше стане със сигурност. Странно досега не съм се сблъсквал с такъв вариант. А защо искаш да го наследява имаш ли някаква определана цел с това?

от RumenTonev (336 точки)