js 动态原型方式ajax异步类

js 面向对象,挺好玩的,整好上次用jquery 实现瀑布流有兼容性问题,而且是在google 上,就重新用js 写了一个,这里使用了ajax ,就把ajax 单独封装起来了。

js 面向对象有几种实现方式:

1 原始方式:对象的属性可以在对象创建后动态定义

var oCar = new Object;
oCar.color = "blue";
oCar.doors = 4;
oCar.mpg = 25;
oCar.showColor = function() {
  alert(this.color);
};

2 工厂方式:开发者创造了能创建并返回特定类型的对象的工厂函数(factory function)。

function createCar() {
  var oTempCar = new Object;
  oTempCar.color = "blue";
  oTempCar.doors = 4;
  oTempCar.mpg = 25;
  oTempCar.showColor = function() {
    alert(this.color);
  };
  return oTempCar;
}

var oCar1 = createCar();
var oCar2 = createCar();

3 构造函数方式:

一步选择类名,即构造函数的名字。根据惯例,这个名字的首字母大写,以使它与首字母通常是小写的变量名分开。除了这点不同,构造函数看起来很像工厂函数。

构造函数会重复生成函数,为每个对象都创建独立的函数版本。 浪费空间

function Car(sColor,iDoors,iMpg) {
  this.color = sColor;
  this.doors = iDoors;
  this.mpg = iMpg;
  this.showColor = function() {
    alert(this.color);
  };
}

var oCar1 = new Car("red",4,23);
var oCar2 = new Car("blue",3,25);

4
原型方式:首先用空构造函数来设置类名。然后所有的属性和方法都被直接赋予 prototype 属性。

function Car() {
}

Car.prototype.color = "blue";
Car.prototype.doors = 4;
Car.prototype.mpg = 25;
Car.prototype.showColor = function() {
  alert(this.color);
};

var oCar1 = new Car();
var oCar2 = new Car();

5 动态原型方式:

最为有效且节省空间的方式,下面就是一个封装

var offset = document.getElementsByName('offset')[0].value;
        var length = document.getElementsByName('length')[0].value;
        var post = new Post_xml_http("/Index/Show/more_photo","offset="+offset+"&length="+length);
        post.create_xml_obj();
        post.post();
        function Post_xml_http(url,data){
            //定义私有化数据,js 本质上不存在私有化
             this.xml_http = null;
             this.url= url;
             this.data = data;

             //创建xmlhttp 对象  通过动态原型方式创建对象
             if(typeof Post_xml_http._initialized == "undefined"){
                 Post_xml_http.prototype.create_xml_obj=function(){
                    if (window.XMLHttpRequest){
                        // code for IE7+, Firefox, Chrome, Opera, Safari
                        this.xml_http=new XMLHttpRequest();
                    }else{
                        // code for IE6, IE5
                         this.xml_http=new ActiveXObject("Microsoft.XMLHTTP");
                    }
                 };
                 Post_xml_http._initialized = true;
             }

             //进行post 传递数据
             if(typeof Post_xml_http._post_init == "undefined"){
                Post_xml_http.prototype.post =  function(){
                       var xmlhttp = this.xml_http;
                      //建立post 异步连接
                        xmlhttp.open("POST", this.url,true);
                        //设置头部信息
                        xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
                        xmlhttp.send(this.data);
                        xmlhttp.onreadystatechange=function(){
                             if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
                                    xmlDoc=xmlhttp.responseText;
                                    console.log(xmlDoc);
                             }
                         };
                     };
                 Post_xml_http._post_init = true;
             }

         }

效果:

时间: 2024-11-09 03:19:33

js 动态原型方式ajax异步类的相关文章

Ajax:实现后台验证js实现get方式的异步请求,判断用户名是否重复

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html> <head> <title>ajax</title> <script src="/ajax/js/jquery-3.3.1.min.js"></script> </head> <body> <

js实现post方式的异步请求

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html> <head> <title>ajax</title> <script src="/ajax/js/jquery-3.3.1.min.js"></script> </head> <body> <

JavaScript对象的创建之动态原型方式

为了让定义的方式更加符合java的需求,就把定义方法的原型代码放置在Person这个构造函数中. function Person(name,age,friends){ //属性在构造函数中定义 this.name = name; this.age = age; this.friends = friends; //不能使用重写的方式定义 /*Person.prototype = { constructor:Person, //方法在原型中定义 say:function() { alert(this

请用原生JS代码实现一个Ajax异步请求。

实现ajax之前必须要创建一个 XMLHttpRequest 对象.如果不支持创建该对象的浏览器,则需要创建 ActiveXObject. var xmlHttp; function createxmlHttpRequest() { if (window.ActiveXObject) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest) { xmlHttp=new XM

js自定义类,混合的构造函数/原型方式

“混合的构造函数/原型方式” 用构造函数来定义非函数属性,用原型方式定义对象的函数属性,结果所有函数都只创建一次,而每个对象都具有自由的对象属性实例. function ocar(color){  this.color = color;  this.arr = new Array("s"); } ocar.prototype.showColor = function(){  alert(this.color); } var car = new ocar("resd"

面向对象JS基础讲解,工厂模式、构造函数模式、原型模式、混合模式、动态原型模式

什么是面向对象?面向对象是一种思想!(废话). 面向对象可以把程序中的关键模块都视为对象,而模块拥有属性及方法.这样我们如果把一些属性及方法封装起来,日后使用将非常方便,也可以避免繁琐重复的工作.接下来将为大家讲解在JS中面向对象的实现. 工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,而由于在ECMAScript中无法创建类,因此用函数封装以特定接口创建对象.其实现方法非常简单,也就是在函数内创建一个对象,给对象赋予属性及方法再将对象返回即可. function createBlog(

PHP+jQuery 实现可选择url和ajax方式的分页类

1 /* 2 ******* 环境:Apache2.2.8 ( 2.2.17 ) + PHP5.2.6 ( 5.3.3 ) + MySQL5.0.51b ( 5.5.8 ) + jQuery-1.8.3.min.js + Smarty 3.1.18 ******* 3 ******* Date:2014-10-11 4 ******* Author:小dee5 ******* Blog:http://www.cnblogs.com/dee0912/6 */ 做了一个分页的功能模块,主要的文件包括

js:对象的创建(基于组合和动态原型)

基于原型的创建虽然可以有效地完成封装,但是依然存在如下问题: 1.无法通过构造函数来设置属性值 2.当属性中有引用类型变量时,可能存在变量值重复 function Person(){ } Person.prototype = { constructor:Person, name:"Leon", age:30, friends:["Ada","Chris"], say:function(){ alert(this.name+"["

【整理】Ajax异步实现的几种方式总结

AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术.GET 还是 POST?与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用.然而,在以下情况中,请使用 POST 请求: 无法使用缓存文件(更新服务器上的文件或数据库) 向服务器发送大量数据(POST 没有数据量限制) 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠 异步