У меня есть небольшой фрагмент кода, который присваивает свойство прототипа и свойство объекта с тем же именем. Доступ к этому testNumber
после создания объекта всегда будет показывать свойство объекта, которое я понимаю, поскольку оно сначала будет искать свойство на объекте, а затем в прототипе объектов, а затем прототип объектов и т. Д.Свойство прототипа с тем же именем, что и свойство объекта
Но мой вопрос: , есть ли способ прямого доступа к свойству прототипа в этом случае? [Только примечание, я не знаю, когда мне действительно нужно было делать это на практике, но это просто то, что я хотел бы узнать по своему собственному здравомыслию].
function MyObject1(formalParameter){
this.testNumber = formalParameter;
}
MyObject1.prototype.testNumber = 55;
var mine = new MyObject1(10);
alert(mine.testNumber);
Спасибо, это именно то, что я искал. Но можете ли вы объяснить, что вы подразумеваете под «Если вы сделали странные вещи»? Такие странные вещи, как что? – Nealbo
Когда вы создаете конструктор, его объект 'prototype' инициализируется с помощью свойства' constructor', возвращающего функцию конструктора. Если вы просто добавите методы в прототип, вы будете в порядке, но если вы замените весь прототип (например, «Func.prototype = {...}'), вам нужно будет восстановить это свойство 'constructor' самостоятельно (' Func .prototype.constructor = Func' после того, как вы переопределили прототип). – lanzz
Свойство конструктора записывается, поэтому вы можете изменить его значение, скажем, для ссылки на другой объект. Кроме того, конструктору может быть назначен другой прототип, так что 'obj [[Prototype]]' не является текущим конструктором.prototype'. – RobG