面向对象


一:什么是面向对象?
     对象(Object)是问题域或实现域中某些事物的一个抽象,它反映此事物在系统中需要保存的信息和发挥的作用;它是一组属性和有权对这些属性进行操作的一组服务的封装体。 关于对象要从两方面理解:一方面指系统所要处理的现实世界中的对象;另一方面对象是计算机不直接处理的对象,而是处理相应的计算机表示,这种计算机表示也称为对象。

二:创建对象

  对象的创建方式是用关键字 new 后面跟上实例化的类的名字:

var oObject = new Object();
var oStringObject = new String();	

 

 <---面向对象--->
例:
<script> function method(){ console.log("这是一个函数"); } method(); function Student(name,sex,age){ this.name = name; this.sex = sex; this.age = age; this.study = function(){ console.log("我的名字叫:"+this.name); } } var stu1 = new Student("张飞","男",20); stu1.study(); // stu1.phone = "12345"; var stu2 = new Student("小乔","女",21); stu2.study(); Student.prototype.phone = "88888"; console.log(stu1.name+"的电话:"+stu1.phone); console.log(stu2.name+"的电话:"+stu2.phone); </script>

三:面向对象编程方式

1.函数式编程 
函数式编程是种编程典范,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算。λ演算的函数可以接受函数当做输入(参数)和输出(返回值)。
2. 对象式编程 
面向对象编程是使用对象的编程范式——包含数据域、方法以及他们之间的交互——来设计应用和程序。编程技术包括数据抽象,封装,多态和继承。
 四:面向对象组成部分 

1. 特征/属性
2. 行为/方法

 类

1. 具有相同特征(属性)和行为(方法)的对象集合
2. 类是对象的抽象
3. 对象式类的实例

原型

根据对象产生对象的实例

继承

代码可以重用,可以扩展

js继承 

对象冒充法

五:面向对象语言的要求

面向对象语言需要向开发者提供二种基本能力:

  1. 封装 - 把相关的信息(无论数据或方法)存储在对象中的能力
  2. 继承 - 由另一个类(或多个类)得来类的属性和方法的能力

     1.封装:

Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象。

那么,如果我们要把"属性"(property)和"方法"(method),封装成一个对象,甚至要从原型对象生成一个实例对象,我们应该怎么做呢?

一、 生成对象的原始模式

假定我们把猫看成一个对象,它有"名字"和"颜色"两个属性。  

 var Cat = {

    name : '',

    color : ''

  }

现在,我们需要根据这个原型对象的规格(schema),生成两个实例对象。

 var cat1 = {}; // 创建一个空对象

    cat1.name = "水"; // 按照原型对象的属性赋值

    cat1.color = "白色";

  var cat2 = {};

    cat2.name = "水";

    cat2.color = "白色";

这就是最简单的封装了,把两个属性封装在一个对象里面。

 

2.多态:

基本概念:

1.多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态。

2.在使用多态是,会进行动态检测,以调用真实的对象方法。

3.多态在代码中的体现即父类指针指向子类对象。

4.好处:如果函数方法参数中使用的是父类类型,则可以传入父类和子类对象,而不用再去定义多个函数来和相应的类进行匹配了。

5.局限性:父类类型的变量不能直接调用子类特有的方法,如果必须要调用,则必须强制转换为子类特有的方法

 

3.继承:

语法层面上讲,继承就是派生类拥有父类的数据、方法,又添了点自己的东西,所谓子承父业。

<script>
        function People(name,age){
            this.name = name;
            this.age = age;
            this.show = function(){
                console.log("我的名字叫:"+this.name+" 我的年龄为:"+this.age);
            }
        }
        function Man(name,age){
            //对象冒充法1
//            this.inhert = People;
//            this.inhert(name,age);
//            delete this.inhert;
            //对象冒充法2
//            People.call(this,name,age);
            //对象冒充法3
//            People.apply(this,[name,age]);
            this.name = name;
            this.age = age;
        }
        Man.prototype = new People();
        var man1 = new Man("张飞",20);
        man1.show();
        console.log(man1 instanceof People);
</script>

 

posted @ 2015-07-19 15:52  +爱在一起+  阅读(164)  评论(0编辑  收藏  举报