面向对象基础知识

2017-08-15  本文已影响22人  LinDaiDai_霖呆呆

面向对象

第一章:简介

​ 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

​ 生活中的的例子举例。

第二章:对象的属性

2.1 访问对象的属性

<script type="text/javascript">
    //用大括号括起来的一系列的键值对,就构成了JavaScript对象。这种对象称之为字面量对象。
    var person = {
        name : "张三",    // 一个键值对  
        age : 20,
        sex : "男",
        girls: ["小红","小丽"]
        eat : function () { //属性的值是函数,这个时候我们更喜欢把这样的属性称之为方法。
            alert("吃东西");
        }
    }
</script>

一:

​ 通过: 对象.属性

​ 对象的属性只能是常量,不可是变量

例1:
var name = person.name      //将对象person的name属性的值赋值给变量 name ;
alert(name);        
=>张三

person.eat();               //调用函数时记得加上();

二:

​ 通过 对象[属性]

​ 对象的属性可以是变量也可以是常量,若是常量,则用" "或者' '括起来,若是变量,则直接使用

例2:
var name = person["name"];      //访问字符串常量

var n = "age";
var age = person[n];            //访问变量

2.2 给对象添加属性

//给person对象的属性 sex 赋值。在赋值的过程中,首先会判断这个属性在JavaScript中是否存在,如果存在就对这个
//属性重写赋值。如果不存在,就给这个对象添加这个属性,并赋值。
person.sex = "男";   

person.play = function(){
  alert('添加了新的属性,play函数');
}

2.3 删除对象属性

使用操作符: delete

操作符后面不用加( )

例1:
delete person.age;      //使用delete操作符,删除对象的属性age;
alert(person.age)       //弹出undefined,表示这个属性没有定义.   
例2:
alert(delete person.age)    //弹出true,表示这个属性可以删除,并且执行了delete
alert(person.age)       //弹出undefined,表示这个属性没有定义.   

2.4 修改对象属性

person.sex = "女";                   //将person对象的属性sex修改为"女"

person.eat=function(){              //因为函数也是对象中的一个属性,所有也可以修改
  alert("我是新修改的eat函数");
}
person.eat();
=>  我是新修改的eat函数

2.5 遍历对象

for(... in ...)

使用for in 遍历的是p对象各个属性名称

for(var proName in p){              //var 可以省略  in前面表示的是p对象的属性名称
  console.log(proName);             //在此输出的只是p对象的各个属性名称
}

for(var proName in p){
  console.log(p[proName])           //在此输出的是p对象的各个属性的值
}

for(... of ...)

使用for of 遍历的是p对象各个属性的值

for(var pro of p){
  console.log(pro);                 //在此输出的是p对象的各个属性的值
}

第三章: 面向对象的创建

3.1 使用new Object( )

var p = new Object();
p.name = "小王",
p.eat = function(){
  alert('函数')
}

3.2 工厂模式创建

function createP(name,age,sex){
  var p = new Object();
  p.name = name;
  p.age = age;
  p.sex = sex;
  return p;
}

var p1 = createP("小王","22","男");
var p2 = createP("小张","23","女");

createPerson()函数可以多次调用,每调用一次这个函数就会返回一个对象,而且对象的类型仍然是Object类型的。虽然解决了多个相似对象的问题,但却没有解决对象类型识别的问题。

3.3 构造函数创建

为了解决对象类型识别问题,又提出了构造函数模式。

通俗来说,就是用 new 的方式来调用函数的时候,就是构造函数. 如: var p = new person();

这种模式,其实在我们创建一些原生对象的时候,比如Array、Object都是调用的他们的构造函数。

构造函数的使用:

​ 1.首先创建一个对象,这个对象的类型就是构造函数的名字

​ 如例1中的p1就是创建的对象,这个对象的类型就是createP

​ 2.最后会把创建这个对象自动的返回,所以不需要return

​ 3.为什么使用构造函数:实际是给创建对象的一个初始化

​ 4.函数作为构造函数使用时,this指代的是创建的这个对象;函数作为正常调用时,this代指window

例1:
function createP(name,age,sex){
  this.name = name;                     //在构造函数中,this就是指代创建这个对象
  this.age = age;
  this.sex = sex;
}

var p1 = new createP("小王","22","男");    //使用new的方式来调用函数的时候,这个时候,这样的函数就叫构造函数
var p2 = new createP("小张","23","女");

typeof只能测试出:

  1. number 2. string 3. boolean 4. undefined 5.function

    除了以上5种,剩下的所有测试出来的都是object

instanceof 用以检测对象的类型是不是我们想要的

例2:
var p1 = new createP("小王","22","男");
alert(p1 instanceof createP);
=> true
例3:
设计一个构造函数,利用这个构造函数能初始化对象,这个对象确定一个平面的点
对象内应该提供一个方法,这个方法能计算俩个点之间的距离

function Point(x,y){
  this.x = x;
  this.y = y;
  this.distance=function(other){
    return  Math.sqrt(Math(this.x-other.x,2)+Math(this.y-other.y,2));
  }
}
var p1 = Point(10,20);
var p2 = Point(20.30);
console.log(p1.distance(p2));
=>  14.142......
例4:
设计一个构造函数,利用这个构造函数能初始化对象,对象确定一个有圆心的圆
对象内应提供方法:1.计算圆的周长   2.计算圆的面积    3.计算圆心与圆心之间的距离

/**
*定义一个创建圆的构造函数
*point  圆心的坐标,实际是一个对象
*r      圆的半径
**/
function Circle(point,r){   
  this.point = point;
  this.r = r;
  //定义计算周长的函数
  this.perimeter = function(){
    return Math.PI*2*this.r;
  }
  //定义计算面积的函数
  this.area = function(){
    return Math.PI*Math.pow(this.r,2);
  }
  //定义计算圆心距离的函数
  this.circleDistance = function(other){
    return this.point.distance(other.point);        //引用point这个对象中的distance方法
  }
}
//引用例3中的构造函数,获得俩个圆的圆心
var point1 = new Point(10,20);
var point2 = new Point(20,30);
//引用构造函数确定圆
var circle1 = new Circle(point1,10);
var circle2 = new Circle(point2,10);
console.log(circle1.circleDistance(circle2));
例5:
创建一个构造函数,用来初始化对象,这个对象能确定书本的信息,包过:1.书本名  2.作者    3.出版社   4.出版日期  5.出版至今多久
对象中应提供的方法:
                1.用以显示书本的信息到页面上
                2.用以获取书本的信息
                3.用以计算出版至今多久
                
 function Book(bookName,author,press,datePublication){
                this.bookName = bookName;
                this.author = author;
                this.press = press;
                this.datePublication = datePublication;
                //用以显示信息的函数
                //传入的参数div 用来在页面中显示出来
                this.showMsg = function (div) {
                    div.innerHTML = this.getMsg();  //调用getMsg()函数
                };
                //用以获取信息的函数
                this.getMsg=function(){
                    return "书名:"+this.bookName+"<br>"+"作者:"+this.author+"<br>"+"出版社:"+this.press+"<br>"+"出版日期"+this.datePublication.toLocaleString()+"<br>"+"出版至今已:"+this.howDate(new  Date())+"天"
                }
                //用以计算出版时间至今多久
                this.howDate=function(nowTime){
                    var d = nowTime.getTime()-this.datePublication.getTime();//使用getTime()将现在的时间和出版的时间都转换为毫秒
                    return Math.floor(d/(24*3600*1000));
                }
        }
        var book1 = new Book("正太的修养之路","王先生","东莞",new Date(2017,3,4));  //注:月份是从0到1开始的
        console.log(book1);
        book1.showMsg(document.body.appendChild(document.createElement('div')));                

**注:严格模式 "use strict" **

3.4 构造函数与普通函数的区别

1.调用方式不同:

​ 构造函数: new 函数( )

​ 默认返回创建的那个对象

​ 所有单词首字母大写

​ 普通函数: 函数( )

​ 默认返回undefined

上一篇下一篇

猜你喜欢

热点阅读