面向对象基础知识

面向对象

第一章:简介

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

​ 生活中的的例子举例。

第二章:对象的属性

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • 面向对象的特性: 封装 继承 多态 封装作用:方便代码的维护,提高代码的复用性,更安全的访问数据的方式注意:js中...
    柠檬糖阅读 274评论 1 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,651评论 18 139
  • 博客内容:什么是面向对象为什么要面向对象面向对象编程的特性和原则理解对象属性创建对象继承 什么是面向对象 面向对象...
    _Dot912阅读 1,419评论 3 12
  • 今天,又带着孩子和嫂子一起,去外面吃饭。发现三亚多了一家,胡桃里,记得,上一次在胡桃里吃饭,是在南昌,那个时候是父...
    Jiang江柳阅读 135评论 0 0
  • 角色定位 今天看了求职综艺节目《非你莫属》,其中的很多选手都是对自己的角色定位不准确,不明白自己真正适合干...
    便宜的不要不要的阅读 162评论 0 0