JavaScript设计模式-3.原型模式

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title>js高级语法3-原型模式 </title>
 6     </head>
 7     <body>
 8         <script>
 9             /*
10              javascript原型模式(prototype):
11             1. 原型是一个对象,其他对象可以通过它实现属性的继承,所有的对象在默认的情况下都有一个原型。
12              因为原型的本身也是对象。所以一个类的真正原型是被类的内部的prototype属性所持有。
13             2.什么可以称之为对象?
14             在javascript中,一个对象就是任何的无序的键值对的集合。
15             如果他不是一个主数据类型(undefined,null,boolean,number,string)
16             其他的通通叫做对象
17             */
18             
19             /*
20              javascript中的原型是和函数紧密连接的;
21              var o ={} 他不是用function定义的,他有原型吗?
22              有。
23              每个通过函数和new操作符生成出来的对象都持有一个属性  __proto__,这个属性
24              保存了创建他的构造函数的prototype的原型引用。
25              * */
26             /*
27             function Person(){}  // 定义一个空对象
28             Person.prototype.name="张三";
29             Person.prototype.showName=function(){
30                 //这个this表示调用本函数的一个具体实例化的类
31                 alert(this.name);
32             }            
33             new Person().showName();
34             
35         
36             var cat = {};
37         //    cat.prototype.name="112";//报错,prototype未定义
38             //默认隐藏的调用下面的代码:
39             Object.getPrototypeOf(cat).name="zhangdan"; //这是获取隐藏原型的方法,浏览器支持度不好
40             cat.__proto__.master = "javascript";
41             //上边两个是显式调用,下面是隐式调用,作用是一样的
42             cat.age=2;
43             cat['sex']="man";
44             
45             alert(cat.name+" "+cat.master+" "+cat.age+" "+cat["sex"]);
46         */        
47              //利用原型模式实现简单继承
48              function per(){
49                  this.getName = function(str){
50                      alert(str);
51                  }
52              }
53              per.prototype.getAge = function(age){
54                  alert(age);
55              }
56              //不完全继承 
57              var a = {};//空类
58              a.__proto__ = per.prototype; 
59              //把要被继承的原型引用,赋值给要继承的类,相当于一个挂载
60              //如果要继承的类是一个空类,那么就会完全继承
61             a.getAge(3);
62             //a.getName("张丹"); //这个方法 报错,因为继承的是原型,也就是上一级的所有东西,
63             //但是不包括被继承类自身定义的属性和方法
64             
65         
66             //简单方式实现继承(js中无法实现多继承)
67             //完全继承
68             var b = {};
69             b.__proto__ = new per();
70             b.__proto__.constructor = b;
71             b.getAge(9);
72             b.getName("xiaowang");
73             
74             //串联继承
75             function m(){
76                 this.showM = function(){
77                     alert("I am is M ")
78                 }
79             }
80             function n(){
81                 this.showN = function(){
82                     alert("I am is N ")
83                 }
84             }
85             
86             function k(){};
87             n.prototype = new m();
88             n.prototype.constructor = n;
89             
90             k.prototype = new n();
91             k.prototype.constructor = k;
92             var boo = new k();
93             boo.showM();
94             boo.showN();
95         </script>
96     </body>
97 </html>
原文地址:https://www.cnblogs.com/chengyunshen/p/7191739.html