#javascript
#javascript
Вопрос:
Мне любопытно узнать об этом дизайне Javascript и, возможно, о каких-либо причинах такой архитектуры или шаблонах проектирования, которые можно использовать, чтобы воспользоваться этим преимуществом.
constructor
Свойство объекта всегда является ссылкой на функцию, которая создала этот объект, правильно?
Однако, возьмите этот код:
function base()
{
this.SayHi = function ()
{
window.alert('Hi');
};
}
function subclass()
{
this.SayBye = function ()
{
window.alert('Bye');
};
}
subclass.prototype = new base();
var s = new subclass();
s.SayHi();
s.SayBye();
window.alert(s.constructor);
В последней строке будет отображен конструктор для base
, даже если мы знаем, что subclass
был вызван для создания объекта (иначе SayBye
это не сработало бы).
Одним из возможных обходных путей было бы просто сделать:
subclass.prototype.constructor = subclass;
Возможно, более лаконичный способ задать мой вопрос заключается в том, почему s.constructor
равно subclass.prototype.constructor
, а не subclass.constructor
нет, поскольку s
это подкласс instanceof. Спасибо!
Ответ №1:
Все объекты наследуют
constructor
свойство от своего прототипа.
Именно так это и работает. Вы часто видите людей, явно устанавливающих для constructor
свойства значение, которое кажется им более интуитивно понятным.
Комментарии:
1. 1 за ссылку на Javascript Garden, это было интересное чтение! Разрешил несколько заблуждений, которые были у меня в течение многих лет.
2. Это утверждение сбивает с толку, поскольку его легко можно истолковать как обозначающий общедоступный прототип объекта, тогда как наследование происходит от внутренних proptotypes. Требуется еще одно редактирование MDN.
3. @RobG: Спасибо, я отражу новый текст (когда вы его измените).
4. Похоже, ответ на мой вопрос таков : «Это работает таким образом, потому что так и должно работать» 🙂