Javascript中的回调地域,promise,面向对象(工厂模式,原型)

    回调地域:

        与后台发生数据交互的时候,ajax的请求回调中还有一个或者是多个ajax请求,这样的现象就形成了回调地域。

        缺点:代码复杂,所有的请求一环套一环。逻辑不清晰,不方便阅读同时也不利于调试。(ajax破坏了json的调试机制)

        解决办法:promise

1.promise(保证,承诺,允诺)

     作用:(1)答应某件事情,承诺去做某件事情

                (2)用于解决回调地域的现象。回调地域一般出现在ajax请求当中

        三种状态:

                    (1).承诺的事情在进行中

                    (2).承诺的事情没有完成

                    (3).承诺的事情已经完成了

        谁去允诺?做什么事情?完成的情况?

            对象———执行代码---返回结果

                允诺步骤:

                            (1)创建一个允诺对象            两个参数(成功,失败)

                                    var pro= new promise(function(success,failed){

                                            //执行承诺的事情的过程有三种状态

                                                        //(1).承诺的事情在进行中(pending)

                                                        //(2).承诺的事情没有完成 (rejected)

                                                       //(3).承诺的事情已经完成了(resolved)

                                });


                                    pro下有一个“.then”方法,.then方法还可以接收一个回调

                                    pro.then(function(res){

                                            //接收成功回调传递回来的结果,结果保存在res中


                            },function(err){

                                        //接收失败的信息,这样的表达不会报错。

                                    }).then(function(res/err){


                        });

                                    回调函数内可以无限写的then方法,每一次返回的结果就是上一个then方法执行出来的结果

                                    “.catch”方法。接收失败回调传递回来的结果,保存在 err

                                    pro.catch(function(err){

                                            //catch方法接收失败回调传回来的结果,保存在err

                             });




2.对象(面向对象开发)

    (1)对象和类

                对象:当我们要使用一些方法时,这些方法都是存在某个对象下,有了对象才能使用方法

                            对象从何而来?

                                    通过new一个构造函数,得到一个对象。

                            什么是构造函数?

                                    构造函数就是传说中的类,我们只能按照类的方法去理解.(js中没有明确的面向对象的说法)

                            类和对象的关系:先有类才有具体的对象。

          例:

                    要创建很多同一类型的对象,会写很多重复的代码

                    要解决这个代码重复的问题

                    就要应用到面向对象的方式来处理

    (2)面向对象(面向对象是一种高级的编程开发思想)

面向对象就离不开this指向问题

 this回顾

         a.this指向离不开事件调用,函数创建的时候就产生一个this指向

         b.(谁调用就指向谁)当有时间绑定,并执行了事件处理程序时,谁绑定的事件,事件处理程序中的this就指向谁

         c.回调函数中的this指向window

         d.匿名函数可以使用bind( )改变this的指向

                 call( )和apply( )可以改变函数中的this指向

         e.箭头函数本身没有this,它的this是继承父级而来

         f.箭头函数不能使用call( ),apply( ),bind( ),方法来改变this指向

         g.严格模式下,全局函数的this是undefined

         h.面向对象下的一些this

           对象通俗的解释就是: 万事万物皆为对象


            面向对象就是创造一出一个类,给到具体对象使用

开发思想说明:

        把一个功能或者共有的属性,进行封装,形参一中了类型,通过这种类型可以创建无数个具体的对象,

        这些对象就可以使用这种类型的属性和方法。

            使用工厂模式来封装一种类型。

            a.工厂模式封装:

                function Person(name,age,sex){

                    //属性

                    var obj = new Object();

                    obj.name = name;

                    obj.age = age;

                    obj.sex = sex;

                    //方法

                    obj.eat = function(){

                    return this.name + "在吃饭";

                    }

                    return obj;

                }        

            优点:

                    解决了创建多个同类对象代码重复问题

            缺点:

                    这个对象所属类型不明确

                    写法不规范

            什么是构造函数?

                    简单来说能产生对象的一个函数就是构造函数,构造函数本身也是一个函数    


            b.构造函数方式

                    构造的函数首写字母一般大写,这个是约定俗称的用于跟普通函数区分

                构造函数的语法:

                function Person(name, age,sex){//构造函数的实例类型

                //属性

                this.name=name;   //实例属性

                this.age=age;        //实例属性

                this.sex=sex;        //实例属性

                //方法

                this.eat=function( ){  //实例方法

                        return    this.name+”在吃饭”;   

        }

                this.say=function(){  //实例方法

                         return   this.name+”说:今年我”+this.age+”岁了”;

         }

}

                //对象

                var zs=new Person( “张三”,20,“男”);//实例对象

                var lisi=new Person(“李四”,18,“女”) ;//实例对象


                实例属性:

                        在构造函数内部定义的属性交实例属性

                实例方法:

                        在构造函数内部定义的方法叫实例方法


                优点:

                         解决了创建多个同类对象代码重复问题 

                         解决了对象所属不明确的类型

                         代码规范

                缺点:

                        实例方法在内存空间占据的空间会很多,每new实例对象就会在内存中开辟一个函数的空间

                  来存放一个函数,这样的函数一般都是给所有的实例对象使用。这些方法都是公共的所以这里浪费了内存资源。

        c.构造函数的原型

            原型(prototype)是一个对象保存,同时在另外一个空间里面也叫原型空间

                .prototype

                是构造函数下的原型对象。(是以属性的情况存在)

                可以在原型下面创建属性跟方法

                例如:

                    Person.prototype.phone=“122312312312312”;//原型属性

                    Person.prototype.eat=function( ){return this.eat( );}//原型方法

                (原型只能直接被修改)

                原型下的属性和方法被所有的实例对象共享,一个改了,大家都改了。


        d.完整的面向对象方式(混合对象方式)

                私有(实例对象)的属性写在实例属性里面。

                共有(实例方法)的方法写在原型下面。

你可能感兴趣的:(Javascript中的回调地域,promise,面向对象(工厂模式,原型))