Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Объект на основе функции (https://javascript.ru/forum/misc/47388-obekt-na-osnove-funkcii.html)

Sergey_New 21.05.2014 23:12

Объект на основе функции
 
Создал объект на основе функции:
function person(){
this.sex="";
this.name="";
}
var persona=new person();
Если смотреть в отладчике (VS 2008), то указан тип - Object, (person).
Как узнать, на основе какой функции создан объект из свойств persona?

MallSerg 21.05.2014 23:40

<script>
function person(){
this.sex="";
this.name="";
};
var persona=new person();
alert(persona.constructor)
</script>

Пользуйся отладчиком в браузере таких вопросов не будет

Vlasenko Fedor 22.05.2014 00:05

<script>
  function person() {
    this.sex = "";
    this.name = "";
  }
  var persona = new person();
  var reg = /^.*?\s(.*)\(/
  alert("Function name - " + reg.exec(persona.constructor.toString())[1]);
  alert("Function name - " + persona.constructor.name);
</script>


<script>
  function person() {
    this.sex = "";
    this.name = function () {
      return this.constructor.name;
    }
  }
  var persona = new person();;
  alert("Function name - " + persona.name());
</script>

cyber 22.05.2014 00:39

Дополню ответ вышел, если constructor был перезаписан, так же можно посмотреть через не стандартное свойство __proto__ работает в хроме, лисе и опере.

nerv_ 22.05.2014 01:28

alert(({}).constructor.name);
alert(([]).constructor.name);
alert((/1/).constructor.name);

а вообще сам вопрос не корректен и еще дофига замечаний но писать лень :)

foo 22.05.2014 01:57

Вот так работает:
function Fu(){this.a=1}
ob=new Fu()
console.log(ob.constructor.name) // Fu

А вот так нет, между прочим.
Fu=function(){this.a=1}
ob=new Fu()
console.log(ob.constructor.name) //

Проверил в ноде и в хроме.

Aetae 22.05.2014 02:17

foo, Ну так вторая - безымянная. Fu - в таком случае просто переменная.

kobezzza 22.05.2014 08:06

Цитата:

Сообщение от cyber (Сообщение 312809)
Дополню ответ вышел, если constructor был перезаписан, так же можно посмотреть через не стандартное свойство __proto__ работает в хроме, лисе и опере.

Свойство __proto__ добавлено в стандарт и работает уже везде.

PS: сейчас рекомендуется юзать Object.getPrototypeOf / Object.setPrototypeOf, где такое поддерживается.

kobezzza 22.05.2014 08:21

Цитата:

А вот так нет, между прочим.
Fu=function(){this.a=1}
Fu = function Fu() { ... };

Sergey_New 22.05.2014 08:42

Спасибо всем!
Poznakomlus, использовал Ваш регекс


Часовой пояс GMT +3, время: 02:28.