面向对象与构造函数

面向对象是一种思维方法

面向对象是一种编程方法

面向对象并不只针对某一种编程语言

什么是面向对象?

        面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

什么是面向过程?

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

面向对象和面向过程的区别与联系

1、面向过程侧重整个问题的解决步骤,着眼局部或者具体

2、面向对象侧重具体的功能,让某个对象具有这样的功能。更加侧重于整体。

面向过程的优点:流程化使编程任务明确,在开发之前基本考虑了实现方式和最终结果;效率高,面向过程强调代码的短小精悍,善于结合数据结构来开发高效率的程序;流程明确,具体步骤清楚,便于节点分析。

面向过程的缺点:需要深入的思考,耗费精力,代码重用性低,扩展能力差,维护起来难度比较高,对复杂业务来说,面向过程的模块难度较高,耦合度也比较高。

面向对象的优点:结构清晰,程序便于模块化,结构化,抽象化,更加符合人类的思维方式;封装性,将事务高度抽象,从而便于流程中的行为分析,也便于操作和自省;容易扩展,代码重用率高,可继承,可覆盖;实现简单,可有效地减少程序的维护工作量,软件开发效率高。

面向对象的缺点:效率低,面向对象在面向过程的基础上高度抽象,从而和代码底层的直接交互非常少机会,从而不适合底层开发和游戏甚至多媒体开发;复杂性,对于事务开发而言,事务本身是面向过程的,过度的封装导致事务本身的复杂性提高。

编程语言中面向对象的实现方式:

1、基于类的面向对象 ——对象(object)依靠 类(class)来产生

2、基于原型的面向对象 ——对象(object)则是依靠 构造器(constructor)利用 原型(prototype)构造出来的 

面向对象的三大特征:

1.封装    把客观事物封装成抽象的类或具体的对象,并且类或对象可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

2.继承    让某个类型的对象获得另一个类型的对象的属性的方法。

3.多态    不同实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。

```

//用大括号括起来的一系列的键值对,就构成了JavaScript对象。这种对象称之为字面量对象。

varperson={

name:"张三",// 一个键值对

age:20,

sex:"男",

eat:function() {//属性的值是函数,这个时候我们更喜欢把这样的属性称之为方法。

alert("吃东西");

}

}

```

name : "张三"  一个键值对表示JavaScript对象的一个属性。 name是属性名,  "张三" 属性值。

属性可以是任意类型的。可以包括我们以前学的简单数据类型,也可以是函数,也可以是其他的对象。

当一个属性的值是函数的时候,我们更喜欢说这个属性为方法。

访问对象的属性

1、对象.属性名的方式,只适合知道了属性的名字,可以直接写。比如: person.age 。如果属性名是个变量,则这种方法无效, 对象.变量名 会出现语法错误。

2、对象[属性名],这种方式使用无限制。如果是字符串常量,则应该用""或''引起来,如果是变量,可以直接使用.

添加对象属性

```

//给对象添加方法

person.play = funcion(){

alert("打击high起来");

}

```

删除对象属性

```

// 使用delete操作关键字,删除person对象的属性age

delete person.age;

alert(person.age);  //弹出undefined。表示这个属性没有定义

```

修改对象属性

```

// 把person对象的sex属性的值修改为 女

person.sex = "女";

//直接设置它的值修改

```

使用for...in遍历对象的属性

```

// 在用for...in遍历的时候, in前面的变量pn指的是属性的名称。

for (pn in person) {

alert(pn + " " + person[pn]);

}

```

多通创建对象方式

1.使用new Object()创建

```

//使用object创建一个对象 完全等同于 var person = {};

var person = new Object();

//给对象添加属性

person.name = "李四";

//给对象添加方法

person.eat = function () {

alert("好好吃")

}

```

2.工厂模式创建

```

function createPerson(name, age, job) {

var o = new Object();

o.name = name;

o.age = age;

o.job = job;

o.sayName = function() {

alert(this.name);

};

return o;

}

var person1 = createPerson("张三", 29, "js开发者");

var person2 = createPerson("李四", 27, "java开发者");

```

3.构建函数模式创建

```

functionPerson(name,age,sex) {

//给创建对象初始化

this.name=name;

this.age=age;

this.sex=sex;//this指构建函数的新对象 如创建p1 this就指p1  创建p2 this就是指p2

this.eat=function() {

alert(this.name+"在吃东西");

}

}

varp1=newPerson("张三",20,"男");

p1.eat();//张三在在吃东西

varp2=newPerson("李四",30,"男");

p2.eat();//李四在在吃东西

alert(p1instanceofPerson);//p1是person的实例(对象) person是p1的类型

```

说明:

1.使用构造函数创建对象,必须使用关键字new ,后面跟着构造函数的名,根据需要传入相应的参数。

2.使用 new 构造函数()  的方式创建对象,经历了下面几个步骤。

创建出来一个新的对象

将构造函数的作用域赋给新对象。意味着这个时候this就代表了这个新对象

执行构造函数中的代码。  在本例中就是给新对象添加属性,并给属性初始化值。

构造函数执行完毕之后,默认返回新对象。 所以外面就可以拿到这个刚刚创建的新对象了。

构造函数与普通函数的关系

1.他们都是函数。构造函数也是函数,也可以像普通的函数一样进行调用。 做普通函数调用的时候,因为没有创建新的对象,所以this其实指向了window对象。

2.构造函数和普通函数仅仅也仅仅是调用方式的不同。也就是说,随便一个函数你如果用new 的方式去使用,那么他就是一个构造函数。

3.为了区别,如果一个函数想作为构造函数,作为国际惯例,**最好把这个构造函数的首字母大写。**

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

推荐阅读更多精彩内容