2012-05-31 213 views
0

我有一小段代码使用相同的名称指定原型属性和对象属性。创建对象后访问该testNumber将始终显示的对象属性,我的理解,因为它会首先查找对象的属性,然后在对象的原型,然后protoype的原型等具有与对象属性相同名称的原型属性

但我的问题是, ,在这种情况下,有没有办法直接访问原型的属性? [请注意,我不知道在实际中我什么时候需要这样做,但这只是我想为自己的理智找到的东西]。

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]]'不是当前的'constructor.prototype'。 – RobG

相关问题