为了账号安全,请及时绑定邮箱和手机立即绑定

关于prototype的一点疑惑

关于prototype的一点疑惑

慕仙森 2019-04-13 08:46:10
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高级程序设计。
                            
查看完整回答
反对 回复 2019-04-13
?
慕标5832272

TA贡献1966条经验 获得超4个赞

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

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信