Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Еще один тупой вопрос по наследованию (https://javascript.ru/forum/misc/51888-eshhe-odin-tupojj-vopros-po-nasledovaniyu.html)

krutoy 24.11.2014 17:07

Erolast,
По-моему, эту строчку можно вообще опустить, она ничего не делает
function FormField(data) {
  this._d = data;
}
 
function FormFile(data, opts) {
  FormField.call(this, data);
  this.opts = opts;
}
 
FormFile.prototype = FormField.prototype;
//FormFile.prototype.constructor = FormFile;
 
var a = new FormFile(1, 2);
var b = new FormFile(10, 22);
console.log(a, a instanceof FormField, b instanceof FormField);
console.log(b, a instanceof FormFile, b instanceof FormFile);

точней, делает то, что перезаписывает скрытую ссылку на явную.

devote 24.11.2014 18:56

Цитата:

Сообщение от Erolast
Конструктор не должен быть enumerable.

а где он таков есть?

Цитата:

Сообщение от krutoy
точней, делает то, что перезаписывает скрытую ссылку на явную.

кто сказал?

где вы тут увидели открытие перечислимости конструктора?
прогоните объекты a или b через for...in и посмотрите где там перечисляется конструктор?

nerv_ 24.11.2014 19:24

Цитата:

Сообщение от devote
где вы тут увидели открытие перечислимости конструктора?
прогоните объекты a или b через for...in и посмотрите где там перечисляется конструктор?

он вот о чем https://github.com/nervgh/yum.js/blo...rc/yum.js#L177

Хотя, по хорошему, на это пофиг.

krutoy 24.11.2014 19:27

devote,
Я не так выразился. Вы явно переопределили ссылку, скрытую, которая там и так была. Это лишнее телодвижение просто. а само свойство constructor -- как было скрытым, так и осталось.

nerv_ 24.11.2014 19:41

Цитата:

Сообщение от krutoy
Это лишнее телодвижение просто

вот почему у тебя карма в минусе :D

devote 24.11.2014 19:58

Цитата:

Сообщение от krutoy
Вы явно переопределили ссылку, скрытую, которая там и так была.

да была, но другая... если Вы код читать умеете, должны понимать какая именно там была и какая стала и почему и для чего.

krutoy 24.11.2014 20:15

devote,
Да, я ошибся, невнимательно глянул, извиняюсь. Но код ваш работает и без этого. Зачем Вы это сделали?

krutoy 24.11.2014 20:18

Цитата:

Сообщение от devote
почему и для чего

Вот это, как раз интересует:)

tsigel 24.11.2014 20:35

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

krutoy 24.11.2014 21:18

tsigel,
Но тогда экземпляры FormFiled, будут ссылаться на FormFile
function FormField(data) {
  this._d = data;
}
  
function FormFile(data, opts) {
  FormField.call(this, data);
  this.opts = opts;
}
  
FormFile.prototype = FormField.prototype;
FormFile.prototype.constructor = FormFile;
  
o=new FormField()
console.log(o.constructor)
// [Function: FormFile]


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