很久没碰过javascript的时候,会把javascript的一些基本知识混淆,尤其是对面向对象编程这一块,所以我重新编写了一些代码来清楚说明!
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>javascript 不同写法中的理解</title>
- </head>
- <body>
- </body>
- <script type="text/javascript">
- /*
- 1。 静态类,静态属性,静态方法,不能够创建实例,不能使用new
- 在内部访问各自内容时使用this
- 静态类是没有原型可言的
- */
- var t ={
- name:"t"
- }
- t.fn = function(){
- alert(this.name);
- }
- //new t().fn();//失败
- t.fn();//成功 返回 t
- /*
- 2。给方法添加原型方法
- */
- var o = function(){
- this.name = "o";
- }
- o.prototype.fn = function(){
- alert(this.name);
- }
- //o.fn();//失败
- new o().fn();//成功 返回 o
- /*
- 3。v 和 v.fn 是没有任何关系的,两个是独立体
- 这里是定义两个对象:定义v.fn对象和给v添加原型方法
- */
- var v = function(){
- this.name = "v";
- this.test = function(){
- alert("this is test fun");
- }
- }
- v.fn = v.prototype = {
- init:function(){
- alert(this.name);
- }
- }
- new v().init();//成功返回 v
- v.fn.init();//返回undefined
- //v.fn.test();//失败
- // new v.fn().init();//失败
- /*
- 4。 p是没有原型可言的,在本实例中
- r.prototype = p;
- 是把p里面所有的属性和方法赋给r,p里面的属性和方法与r里面的属性和方法有相同时,取的是r里面的属性和方法
- */
- var r = function(){
- this.name = "r";
- this.test = function(){
- alert("r:"+this.name);
- }
- }
- var p = {
- name:"p",
- age:"22",
- fun:function(){
- alert("p:"+this.name);
- }
- }
- r.prototype = p;
- new r().test();//返回 r:r
- new r().fun();//返回 p:r
- alert(new r().age);//返回22
- </script>
- </html>