2012-05-31 2 views
0

У меня есть небольшой фрагмент кода, который присваивает свойство прототипа и свойство объекта с тем же именем. Доступ к этому testNumber после создания объекта всегда будет показывать свойство объекта, которое я понимаю, поскольку оно сначала будет искать свойство на объекте, а затем в прототипе объектов, а затем прототип объектов и т. Д.Свойство прототипа с тем же именем, что и свойство объекта

Но мой вопрос: , есть ли способ прямого доступа к свойству прототипа в этом случае? [Только примечание, я не знаю, когда мне действительно нужно было делать это на практике, но это просто то, что я хотел бы узнать по своему собственному здравомыслию].

function MyObject1(formalParameter){ 

    this.testNumber = formalParameter; 
} 

​MyObject1.prototype.testNumber​ = 55; 

var mine = new MyObject1(10); 
alert(mine.testNumber); 

ответ

2

Вы можете получить доступ к прототипу через этот экземпляр constructor собственности:

alert(mine.constructor.prototype.testNumber); 

не будет работать, если вы сделали странные вещи с прототипом без сохранения его свойства constructor, или если у вас есть свойство экземпляра под названием constructor по какой-то причине.

+0

Спасибо, это именно то, что я искал. Но можете ли вы объяснить, что вы подразумеваете под «Если вы сделали странные вещи»? Такие странные вещи, как что? – Nealbo

+1

Когда вы создаете конструктор, его объект 'prototype' инициализируется с помощью свойства' constructor', возвращающего функцию конструктора. Если вы просто добавите методы в прототип, вы будете в порядке, но если вы замените весь прототип (например, «Func.prototype = {...}'), вам нужно будет восстановить это свойство 'constructor' самостоятельно (' Func .prototype.constructor = Func' после того, как вы переопределили прототип). – lanzz

+1

Свойство конструктора записывается, поэтому вы можете изменить его значение, скажем, для ссылки на другой объект. Кроме того, конструктору может быть назначен другой прототип, так что 'obj [[Prototype]]' не является текущим конструктором.prototype'. – RobG

Смежные вопросы