js中的面向对象

来源:互联网 发布:java 递归删除子节点 编辑:程序博客网 时间:2024/06/10 09:29

什么是对象?

万物皆对象,比如电视机就是一个对象,很具体的一个实例。

什么是面向对象OOP(Object Oriented Programming)?(是一种思想) 。

1使用对象时,只关注对象提供的功能,不关注其内部细节,
2可以构造新对象。

OOP有哪些特点?

抽象:抓住关键需要的点(比如员工工资发放系统,只需要知道名字,工号就可以,不需要身高,体重之类的属性)

封装:电视机就像个黑盒子,内部的原理电路板什么都不用管,只要会用表面的功能就好啦!比如JQ,会用就行,里面的原理可暂时不管。

继承: 父亲有一些功能,儿子继承了这些功能。儿子还可以根据自己的需要有些新的功能和特征。目的是为了最大目的的重用代码。

多重继承: 简单的说,就是一个儿子多个爹。比如盒子:能装东西,汽车:能跑。合起来遗传给后代,就是货车。

函数: 在对象里面就叫做方法,一个东西。函数跟对象绑在一起的话,就叫做方法了。

变量: 在对象里面就叫做属性,一个东西。 变量跟对象绑在一起的时候就叫做变量了。比如变量是女朋友,结婚后就叫做老婆了。同一个东西,只不过从属于我了,是我的女人,就变成了老婆。

OOP的组成

方法——函数:过程、动态的。
属性——变量:状态、静态的。
对象:属性和方法构成的,(其实就是挂载在某个对象上面的变量和函数)

构造函数: 其实是普通的函数,只是它的功能是用来构造对象的函数

function fn(a,b){    //构建对象的代码块}

工厂摸式:

原料:(objiect);
加工:(构建方式和属性);
出厂:(return);
工厂方式:这个函数的工作流程有点像工厂加工产品,所以叫工厂模式。如下

function fn(a,b){    //创建原料   <!-- var obj = new Object();-->    //加工产品    obj.name = name;    obj.yongchu = function(){        alert("obj的用途是XXX")    }    //产品出厂    <!--return obj;-->}var obj = fn("one","eat") //没有new关键字var obj2 = fn("two","eat")alert(obj.yongchu == obj2.yongchu) //false功能一样却不相等,同样功能占用了更多的内存,浪费。

工厂方式缺点:

1.没有new。
2.不同对象具有相同方法时,方法却不相等,这就占用了内存;

解决方案:

 function CreatePerson(name,sex){ //构造函数里面写属性,CreatePerson首字母大写        this.name = name;        this.sex= sex;    }    createPerson.prototype.showName = function(){ //原型里面写方法        alert("我的名字" + this.name);    }    createPerson.prototype.showsex = function(){        alert("我的sex" + this.sex);    }    var obj = new createPerson("mike","123456");    obj.showName();    obj.showsex();

这就是较为完整无缺的面向对象写法!

原型模式

这里要记住一句话:构造函数中的属性和方法在每个对象实例之间都不是共享的,都是各自搞一套;而要想实现共享,就要将属性和方法存到构造函数的原型中。