猿问

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

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

慕容708150

正确的写法是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

饮歌长啸

原型链的概念理解错误MyObject1本身只是构造函数,不存在于原型链中。o1=newMyObject1()创建了一个基于MyObject1.prototype的实例,MyObject1执行时又覆盖它。导致o1还是基于之前的那个原型。而MyObject2只是在原型上追加了一个method,所以没有问题。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答