写法一代码如下://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 回答
GCT1015
TA贡献1827条经验 获得超4个赞
正确的写法是functionObject(){//blanblanblan}Object.prototype={test:function(){//blanblanblan}};你没有弄清Javascript是如何通过构造函数来构建新的对象的。在调用newObject的时候,构造函数Object的prototype是{},为空对象。只有在该构造函数被执行一次后其原型才为{test:function(){}}。你可以尝试一下//JavascriptcodefunctionObject(){Object.prototype={test:function(){window.alert('test');}};}//testvaro=newObject();o=newObject();o.test();这时候test方法是存在的。还有一个注意点是,请不要使用Object作为构造函数的名称,因为Javascript原生构造函数中已经有Object
慕容3067478
TA贡献1773条经验 获得超3个赞
原型链的概念理解错误MyObject1本身只是构造函数,不存在于原型链中。o1=newMyObject1()创建了一个基于MyObject1.prototype的实例,MyObject1执行时又覆盖它。导致o1还是基于之前的那个原型。而MyObject2只是在原型上追加了一个method,所以没有问题。
添加回答
举报
0/150
提交
取消