<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Untitled Document</title> </head> <body> <mce:script type="text/javascript"><!-- function jsclass() { this.p = "never-online"; this.func = function () { alert('func'); } } jsclass.prototype = { func : function () { alert(this.p); } } var a = new jsclass(); a.func(); delete a.func; a.func(); // --></mce:script> <mce:script type="text/javascript"><!-- function jsclass() { this.p = "never-online"; this.func = function () { alert('func'); } } jsclass.prototype = { func : function () { alert(this.p?this.p:'no value'); } } var a = new jsclass(); a.func();//调用内部成员 delete a.func;//此处删除是的类内部定义的func a.func();//调用prototype成员 delete a.func;//试图再次删除func(prototype) a.func();//删除无效(内部的func已经被删除),依然可打印输出 // --></mce:script> 注释:类内部的成员可以用delete删除,而原型里定义的,则不能用delete 实例名.成员名来删除的。 如果用prototype定义后,实例化时:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 也就是在上面的 Copy Code(拷贝代码)-Run HTML(运行代码)-Save Code(另存代码) delete a.func;//此处删除是的类内部定义的func a.func();//调用prototype成员 之后,再次调用a.func(),调用时,通过调用prototype.func来实现的。而并非a.func(),这也解释了为什么在jsclass内部定义func与在prototype定义func时不会有重写现象。 prototype->浅copy(并与instance同用一块内存空间),这也是更符合prototype模式所说, "prototype用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象" 即他们是同一块空间的。这样解释应该更好一些。还是我解释得不清楚呀... constructor->深copy, 拷贝自身构造函数本身所具有的性质 而用new产生一个实例,是由解释器解释后在堆上的,用delete是删除堆上实例所用的空间,但是delete并不能删除prototype,因为他们共用一块存储空间,除非删除自身。 </body> </html>