functionTestClass(){this.property=true;}TestClass.prototype.getValue=function(){returnthis.property;};vartest=newTestClass();window.alert(test.prototype.getValue());问题:在TestClass的原型对象中添加了getValue()方法,为什么无法通过原型来访问这个方法(即test.prototype.getValue()无效),而只能通过test.getValue()来调用。小弟刚接触javascript,望各位大神指点。
2 回答
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
首先,prototype是Constructor的field,instance里面根本就没有。不妨test一下:console.log(test.prototype);而,Instance有一个叫[[prototype]]的内部属性,指向Constructor.prototype。那么,我们怎么通过[[prototype]]来访问Constructor.prototype呢?在ECMAScript5,有一个method可以return[[prototype]]的值;thatis,Object.getPrototypeOf()。alert(Object.getPrototypeOf(test).getValue());LearnmoreonJavaScript高级程序设计。
慕标5832272
TA贡献1966条经验 获得超4个赞
因为只有构造器TestClass才有prototype属性,test是TestClass的实例,根本没有prototype属性,test的proto属性指向了构造器的prototype,不过并不建议使用proto,因为proto是可以被改写的,一旦被改写,将导致javascript的原型链机制失效如果一个实例对象要访问原型链对象上的方法,直接使用即可,对于你代码中给出的例子,只需把最后一句改为window.alert(test.getValue())最后建议你先去把javascript的基础打扎实,了解一下javascript的原型和原型链,可以读一下《JavaScript高级程序设计》等书,或者看下各位大牛的博客文章,给你推荐@nightire大大的这篇文章
添加回答
举报
0/150
提交
取消