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

javascript的对象,成员方法在原型中的定义错误

javascript的对象,成员方法在原型中的定义错误

倚天杖 2019-04-06 16:57:02
写法一代码如下://Javascriptcode//在原型中定义成员方法functionMyObject1(){ //写法一 MyObject1.prototype={ test:function(){ window.alert('test_1'); } };}functionMyObject2(){ //写法二 MyObject2.prototype.test=function(){ window.alert('test_2'); };}//testvaro1=newMyObject1();varo2=newMyObject2();o1.test();//这个会报错:testisnotafunctiono2.test();//这个正常写法一,在浏览器中会报错,说o1.testisnotafunction,这是为什么呢?写法二,则是正确的。这两种写法有何不同?最好是能找到官方的文档解释,先谢过。
查看完整描述

2 回答

?
慕容708150

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

正确的写法是functionObject(){
//blanblanblan
}
Object.prototype={
test:function(){
//blanblanblan
}
};你没有弄清Javascript是如何通过构造函数来构建新的对象的。在调用newObject的时候,构造函数Object的prototype是{},为空对象。只有在该构造函数被执行一次后其原型才为{test:function(){}}。你可以尝试一下//Javascriptcode
functionObject(){
Object.prototype={
test:function(){
window.alert('test');
}
};
}
//test
varo=newObject();
o=newObject();
o.test();这时候test方法是存在的。
还有一个注意点是,请不要使用Object作为构造函数的名称,因为Javascript原生构造函数中已经有Object
                            
查看完整回答
反对 回复 2019-04-06
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

原型链的概念理解错误
MyObject1本身只是构造函数,不存在于原型链中。
o1=newMyObject1()创建了一个基于MyObject1.prototype的实例,MyObject1执行时又覆盖它。导致o1还是基于之前的那个原型。
而MyObject2只是在原型上追加了一个method,所以没有问题。
                            
查看完整回答
反对 回复 2019-04-06
  • 2 回答
  • 0 关注
  • 309 浏览
慕课专栏
更多

添加回答

举报

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