js 面向对象编程

  1 <!DOCTYPE html>
  2 <html>
  3 <head>
  4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  5     <title></title>
  6     <meta charset="utf-8" />
  7 </head>
  8 <body>
  9     <script type="text/javascript">
 10         //javascript有一个内置对象object;利用他可以创建一个空白的对象
 11         person = new Object(); //使用object创建对象
 12         person.name = "张三"; //添加属性
 13         function func() { //定义一个方法,然后把它附加到person
 14             alert(this.name);//this关键字指向函数的父对象
 15         }
 16         Person.showName = func; //这里只有方法名; 如果带();是将方法的返回值赋值给person.showName;
 17         Person.showName(); //调用showName()方法
 18     </script>
 19 
 20     <script type="text/javascript">
 21         //匿名函数
 22         function func() {
 23             alert(this.name);
 24         }
 25         person.showName = func;//可以改写为
 26         person.showName = function () {
 27             alert(this.name);
 28         }
 29     </script>
 30 
 31     <script type="text/javascript">
 32         //无参数的构造函数
 33         function Person() {
 34             this.name = "zhangsan";
 35             this.age = 18;
 36             this.show = function () {
 37                 alert("无参数构造"+this.name+""+this.age);
 38             }
 39         }
 40         //有参数的构造函数
 41         function Person(name,age) {
 42             this.name=name;
 43             this.age=age;
 44             this.show = function () {
 45                 alert("带参数构造"+this.name +" "+ this.age);
 46             }
 47         }
 48         //对象的实例化
 49         var p1 = new Person(); //两个构造函数默认执行离代码最近的
 50         var p2 = new Person("zhangsan", 18); //创建两次对象;执行两次带参
 51         p1.show();//调用对象的方法
 52         p2.show();
 53     </script>
 54 
 55     <script type="text/javascript">
 56         //扩展对象
 57         function abc(name,age) {
 58             this.name = name;
 59             this.age = age;
 60             this.show1 = function () {
 61                 alert(this.name+" "+this.age);
 62             }
 63         }
 64         var a = new abc("zhangsa",18);
 65         a.show1();
 66         abc.prototype.sex = "男";//添加属性
 67         abc.prototype.show2 = function () { //添加方法
 68             alert(this.name +" "+ this.sex+"  "+this.age);
 69         }
 70         a.show2();//调用新方法
 71     </script>
 72 
 73     <script type="text/javascript">
 74         //继承
 75         function A() { //父对象
 76             this.name = "zhangsan";
 77             this.show1 = function () {
 78                 alert("姓名"+this.name);
 79             }
 80         }
 81         function B() {//子对象
 82             this.age = 18;
 83             this.show2 = function () {
 84                 alert("年龄"+this.age);
 85             }
 86         }
 87         B.prototype = new A();
 88         var test = new B();
 89         this.name = "lisi"; //继承父对象的name属性;并修改值
 90         test.show1();//继承"父对象"的show1()方法
 91         test.show2();//调用"子对象"的show2()方法
 92     </script>
 93 
 94     <script type="text/javascript">
 95         //封装
 96         function Box(width,length,height) {
 97             function volume(a, b, c) {
 98                 return a * b * c;
 99             }
100             this.boxVolume = volume(width,length,height); //把方法的返回值赋值给属性
101         }
102         var box = new Box(1,2,3); //传参
103         alert(box.boxVolume); //弹出属性值
104 
105         alert(volume(1,2,3));//不可用
106     </script>
107 </body>
108 </html>
原文地址:https://www.cnblogs.com/enych/p/7651901.html