1.谈一谈我对面向对象的理解


普通过程式写法就是一步一步按着逻辑去写代码,而面向对象是以对象的思想写代码,把所有的属性跟方法挂载在对象上,需要调用的是new一个对象出来

我们一直都在使用对象:Array,Date

ar arr = new Array()
arr.length      //对象下面的属性
arr.push()      //对象下面的方法

面向对象编程(oop)特点

● 抽象:抓住核心问题
● 封装:只能通过对象来访问方法,如arr.push()
● 继承:从已有对象上继承出新的对象
● 多态:多对象的不同形态(在js中用的比较少)

2.构造函数模式写法:面向对象的封装函数


构造函数:new后面调用的函数叫做构造函数

<script>
    function Show(){
        this.name  = 3;
    }
    Show.prototype.sum = function(){
        alert(this.name)
    };
    var p1 = new Show();
    p1.sum()
    </script>

this指向问题

● 当new去调用一个函数,this就是创建出来的对象而且函数的返回值直接就是this

面向对象的组成:方法属性

面向对象的方法(行为、操作):函数、过程、动态的

//对象方法:对象下面的函数
arr.sort = function(){
   alert("1")
  }_

面向对象的属性(变量):状态、静态的

//对象下面的属性:对象下面的变量
var arr=[];
arr.number = 10;
alert(arr.nuber)

3.Prototype模式


如果创建的对象多了,那么同样的方法会存在很多份,为了提高性能,所以用.Prototype模式 (去改写对象下面共用的方法和属性,让共用的方法或者属性在内存中存在一份)

原型:类似于css中的class
普通:方法看做是css中的style

//原型写法
        function Show(){
            this.name = 3;
        };
        Show.prototype.showName = function(){
            var  This = this;
            alert(This.name)
        };
        var p1 = new Show();
        p1.showName()

4.系统中的对象使用


js就是基于原型的程序

例如数组的push方法:
    arr.push();
     Array.prototype.push = function(){}

注意:尽量不要去修改或者添加系统对象下面的方法和属性

5.对象的继承


有时候封装好的函数并不一定在项目的任何地方都是可以直接复用,这时候就需要在原有的对象上新生成一个新的对象来满足当前的需求

什么是继承:

● 在原有对象的基础上,略作修改,得到一个新的对象
● 不影响原有对象的功能

如何继承

属性的继承:

function 新的函数(){
    createPerson.call(this,需要的属性,需要的属性)
}

方法的继承:

for(var attr in 原有函数){
            新函数.prototype[attr] = 有函数.prototype[attr]
    }

如果有写的不好的地方请不吝赐教,不胜感激!



邵静静
50 声望5 粉丝

一直想变成一个很牛的前端工程师