PHP菜鸟学习历程-11

【继承】

在php,一个类去继承另一个类,本类实例化出来的对象,既可以调用本身类的成员,也可以调用父类的成员。

在javascript继承主要通过原型实现,构造函数继承一个对象,构造函数的实例会拥有被继承对象的相关成员。

原型继承prototype

具体实现:

1单成员继承

“构造函数”通过原型的方式继承单一的成员。

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>05-原型继承</title>
 6     <script type="text/javascript">
 7     //① 原型继承--“构造函数”继承单一成员
 8     function Tiger(){
 9         this.color = "black and yellow";
10         this.leg = 4;
11         this.act = function(){
12             console.log(‘猛虎扑食‘);
13         }
14     }
15
16     Tiger.prototype.addr = "孟加拉";
17
18     Tiger.prototype.climb = function(){
19         console.log(‘在爬树‘);
20     }
21
22     var smal = new Tiger;
23     console.log(smal);
24     console.log(smal.addr); //孟加拉
25     smal.climb(); //在爬树
26     </script>
27 </head>
28 <body>
29
30 </body>
31 </html>

05-原型继承

2对象继承

“构造函数”通过原型方式继承一个具体对象。

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>06-原型继承</title>
 6     <script type="text/javascript">
 7       //② 原型继承--“构造函数”继承具体对象
 8       function Tiger(){
 9           this.color = "black and yellow";
10           this.leg = 4;
11           this.act = function(){
12               console.log(‘猛虎扑食‘);
13           }
14       }
15
16       var cat = {eat:function(){console.log(‘fish‘)},hobby:‘sleep‘};
17
18       //Tiger构造函数通过原型方式继承具体对象
19       //通过Tiger实例化出来的对象也会拥有继承对象cat的成员
20       Tiger.prototype = cat;
21
22       var north = new Tiger;
23
24       console.log(north); //color leg act eat hobby
25       north.eat(); //fish
26       console.log(north.hobby); //sleep
27     </script>
28 </head>
29 <body>
30
31 </body>
32 </html>

06-原型继承

对象访问属性的性质和顺序

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>07-对象访问属性及顺序</title>
 6     <script type="text/javascript">
 7       //对象访问属性及顺序
 8       function Wolf(){
 9           this.name = ‘north wolf‘;
10           this.fight = function(){//④  原型对象构造函数的成员
11               console.log(‘多个打一个‘);
12           }
13       }
14       var seven = new Wolf;
15       seven.fight = function(){
16           console.log(‘7个打一个‘);
17       }
18
19       function Dog(){//③ 原型对象成员seven
20           this.age = 6;
21           this.fight = function(){//② 构造函数成员
22               console.log(‘一个打一个‘);
23           }
24       }
25       Dog.prototype = seven;
26       var yellow = new Dog;
27
28       yellow.fight = function(){//① 对象自己的成员
29           console.log(‘一个打多个‘);
30       }
31
32       //console.log(yellow);
33       yellow.fight();
34
35       /*
36         对象访问属性
37         ①在本对象自己成员里边寻找
38         ②如果没有,就去构造函数寻找
39         ③如果再没有,就去原型对象的成员寻找
40         ④如果再没有,就去原型对象的构造函数里边寻找
41       */
42     </script>
43 </head>
44 <body>
45
46 </body>
47 </html>

07-对象访问属性及顺序

原型链继承

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>08-原型链继承</title>
 6     <script type="text/javascript">
 7       function Cat(){
 8           this.weapon = "伶牙俐齿";
 9       }
10       var kitty = new Cat;
11
12       function Tiger(){
13           this.act = ‘猛虎扑食‘;
14       }
15       Tiger.prototype = kitty;
16       var north = new Tiger;
17
18       function Wolf(){
19           this.color = "gray";
20       }
21       Wolf.prototype = north;
22       var seven = new Wolf;
23
24       function Dog(){
25           this.leg = 4;
26       }
27       Dog.prototype = seven;
28       var smallblack = new Dog;
29
30       console.log(smallblack);
31       //console.log(smallblack.weapon);
32
33       /*
34         对象访问属性
35         ① 在对本对象自己成员里边寻找
36         ② 如果没有,就去构造函数寻找
37         ③ 如果再没有,就去原型对象的构造函数里边寻找
38         ④ 如果再没有,就去原型对象的构造函数的原型对象的成员身上寻找。。
39         实际,对象寻找成员就是在原型对象成员和构造函数内部递归寻找。
40         对象寻找成员要在对象成员和构造函数内部
41         不断向上寻找,知道找到顶端对象“Object”位置
42         整个寻找是在对个函数彼此继承的链条形状的代码里边寻找
43         我们把这个多个函数彼此集成的关系称为“原型链”,对象的属性需要在
44         这个链条的内部不断向上寻找
45       */
46     </script>
47 </head>
48 <body>
49
50 </body>
51 </html>

08-原型链继承

原型链:多个函数彼此通过原型继承,整体形成了一个链条,这个链条成为“原型链”

原型链的顶端是Object

对象获得属性信息,要不断在 对象成员 和 构造函数内部 的原型链里边向上寻找如果没有找到就会最终找到Object位置。

判断属性的属组

对象.hasOwnProperty(属性);

返回值:true  属性是本身自己的

返回值:false  原型继承的

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>09-属性属组</title>
 6     <script type="text/javascript">
 7         function Dog(){
 8             this.leg = 4;
 9             this.hobby = "看家护林";
10         }
11         var seven = {eye:‘闪闪发光‘,tail:‘笔直的尾巴‘};
12
13         Dog.prototype = seven;
14
15         var black = new Dog;
16         black.eat = "吃骨头"; //本身自己的成员
17
18         //遍历对象,查看属性的归属for-in
19         for(var k in black){
20             //hasOwnProperty()判断属性属组
21             if(black.hasOwnProperty(k)){
22                 console.log(k+‘--本身成员‘);
23             }else {
24                 console.log(k+‘--原型成员‘)
25             }
26         }
27         </script>
28 </head>
29 <body>
30
31 </body>
32 </html>

09-属性属组

衍生继承

复制继承

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>10-复制继承</title>
 6     <script type="text/javascript">
 7       //衍生继承---复制继承
 8       function Dog(){
 9           this.leg = 4;
10           this.hobby = "看家护林";
11           this.tail = ‘抬头摆尾‘;
12       }
13       var seven = {eye:‘闪闪发光‘,tail:‘笔直的尾巴‘};
14
15       Dog.prototype.extend = function(obj){
16           //把obj对象的属性复制一份给当前的对象this使用
17         for(var k in obj){
18             //复制过来的成员必须是当前对象没有的
19             //如果当前对象没有这个属性就复制
20             if(!this.hasOwnProperty(k)){
21                 this[k] = obj[k];
22             }
23         }
24       }
25       var black = new Dog;
26       black.extend(seven); //把seven的相关成员复制给black使用
27       console.log(black);
28     </script>
29 </head>
30 <body>
31
32 </body>
33 </html>

10-复制继承

该复制继承非常灵活,可以根据实际需要给对象复制需要的具体成员。

总结:

  1. 私有成员
  2. 静态成员
  3. 原型继承

prototype

①       构造函数继承单一成员

②       构造函数继承具体对象

③       多个构造函数可以彼此继承,形成一个继承链条,该链条成为“原型链”

原型链的顶端是Object。

4.复制继承extend

时间: 2024-08-10 13:25:13

PHP菜鸟学习历程-11的相关文章

PHP菜鸟学习历程-8

2 构造函数和普通函数的区别 两者本身没有实质区别,具体看使用 new  函数();   -------->构造函数 函数();        ---------> 普通函数 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>26-构造函数和普通函数</title> 6 &l

PHP菜鸟学习历程-7

[面向(基于)对象] 1 创建对象 在php里边,需要先找到一个类别,在通过类创建具体对象 在javascript里边,可以直接创建具体对象,后期可以再给对象丰富许多属性或方法. 1. 字面量方式创建对象 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>21-创建对象</title>

PHP菜鸟学习历程-4

4 执行环境可以访问什么变量 具体可以访问变量类型:局部变量.参数.函数.外部环境变量 优先级:局部变量 > 函数 > 参数 > 外部环境变量 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>08-执行环境可以访问的变量信息</title> 6 7 <scrip

PHP菜鸟学习历程-3

JS-作用域链及作用 [作用域链] 1 什么事作用域链 一个变量,在当前环境可以使用,当前环境的内部环境也可以使用,内部的深层环境...也可以使用,变量在不同环境都可以使用的现象想成了一个链条,称为“作用域链” 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>02-作用域链定义</title

PHP菜鸟学习历程-6

[闭包案例] 1 闭包创建数组 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>17-闭包-数组</title> 6 <script type="text/javascript"> 7 var num=new Array(); 8 9 for(var i

PHP菜鸟学习历程-1 JS高级-34-昨天内容回顾

JS高级-34-昨天内容回顾     时间:2015-5-11 1.DOM获取元素节点 document.getElenmentById(id 属性值)                                   具体元素节点对象 document.getElenmentsByTagName(tag 标签名称 div ul li)        数组列表 document.getElenmentsByName(Name 属性值)                       数组列表 2.

PHP菜鸟学习历程-2

1.dom操作,利用dom创建无序列表.并追加到body里边,里面要求至少有四个项目. 2.给每个无序列表设置事件(dom2级),鼠标移入.移除,让鼠标当前行高亮显示 node.style.backgroundColor="gray"; node.style.backgroundColor="";

SOC学习历程概述

从开始接触soc到现在大概有两年半左右的时间了,经历了ORSOC到minsoc再到mkg-soc的搭建,以及现在的大小核系统的搭建 首先先讲下学习的前期需要具备的知识,前面3点是必须,后面3点可以中间学习的过程再学习.之所以有这些要求主要是以防中间的学习过程中,有些东西看不懂而走弯路. 学习的前期准备:1.学过数电,有一定的电路基础.2.熟练掌握verilog语言.3.对于计算机组成原理,体系结构有一定的了解.4.学过单片机编程,写过一些简单的裸机程序,最好能够玩过microblaze这样对于软

ACM学习历程—HDU 5023 A Corrupt Mayor&#39;s Performance Art(广州赛区网赛)(线段树)

Problem Description Corrupt governors always find ways to get dirty money. Paint something, then sell the worthless painting at a high price to someone who wants to bribe him/her on an auction, this seemed a safe way for mayor X to make money. Becaus