关于prototype的一点疑惑

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,望各位大神指点。
慕仙森
浏览 392回答 2
2回答

犯罪嫌疑人X

首先,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

因为只有构造器TestClass才有prototype属性,test是TestClass的实例,根本没有prototype属性,test的proto属性指向了构造器的prototype,不过并不建议使用proto,因为proto是可以被改写的,一旦被改写,将导致javascript的原型链机制失效如果一个实例对象要访问原型链对象上的方法,直接使用即可,对于你代码中给出的例子,只需把最后一句改为window.alert(test.getValue())最后建议你先去把javascript的基础打扎实,了解一下javascript的原型和原型链,可以读一下《JavaScript高级程序设计》等书,或者看下各位大牛的博客文章,给你推荐@nightire大大的这篇文章
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript