一般面向过程的写法都是写很多function,坏处:1.代码复用不好 2.函数名称容易重复冲突

下面介绍面向对象的写法:

在JS中每个函数function都是一个对象。

比如,下面这个就是一个对象,我们在使用的时候就可以当作对象来使用。

function HelloWorld()
{
alert('hello world!');
}

使用下面测试函数:调用该函数就会弹出'hello world!'

function _test()
{
var obj = new HelloWorld(); //这里的对象没任何属性和方法 new的时候就调用了构造方法function HelloWorld()
}

如何给对象赋予属性和方法?

在JS中我们使用prototype关键字进行赋值,我们给HelloWorld对象增加一个sayHello()方法和一个name属性:


HelloWorld.prototype ={
name:'javascript',
sayHello:function(){
alert(this.name); //this表示当前对象
}
}

现在我们用面向对象方式来调用:

function _test()
{
var obj = new HelloWorld(); //执行构造方法HelloWorld() 先弹出'Hello Wordl'
obj.sayHello(); //再弹出'javascript'
}

总结:

为对象添加属性和对象格式:

对象名称.prototype = {
属性一 : 属性值,
属性二 : 属性值,
方法一 : function(参数列表) {
方法体;
},
方法二 : function(参数列表) {
方法体;
}
}

如何给对象添加私有变量?

function HelloWorld2()
{
var privateProp = 'hello world 2!';
this.method = function() {
alert(privateProp);
}
}

进行调用:

function _test2()
{
var obj2 = new HelloWorld2();
obj2.method(); // 调用该方法将打印'hello world 2!
alert(obj2.privateProp); // 将打印undefined
}

使用prototype方式更加清晰,可读性好,所以一般都采用这种写法。

JS中如何为类定义静态属性和方法?

如下写法即可,访问只能用类名访问,不能用实例访问。

HelloWorld.age = 22;
HelloWorld.hello = function() {
alert(HelloWorld.age);
}

访问:

function _test()
{
var obj = new HelloWorld();
obj.sayHello(); // 正确,实例方法,可以通过实例进行访问
HelloWorld.hello(); // 正确,静态方法,通过类名进行直接访问
obj.hello(); // 错误,不能通过实例访问静态方法。会报JS错误!
}

JS面向对象示例写法:

(function() {
var BaoPay = {
Config: { //属性设置
ajaxUrl: "/Ajax/BaoPayLog.ashx"
},
ajax: function(params, callback) {
var that = this;
$.ajax({ type: "post",
cache: false,
dataType: "json",
url: BaoPay.Config.ajaxUrl, //调用属性
data: params,
error: function(data) {
if (window.console) {
console.log("error log: " + data.responseText);
}
},
beforeSend: function(XMLHttpRequest) {
//$("#ploybut").unbind("click");
},
success: function(data) {
callback.call(that, data);
}
});
},
ajaxt: function(params, callback) {
var that = this;
$.ajax({
type: "post",
cache: false,
async: false,
dataType: "json",
url: BaoPay.Config.ajaxUrl,
data: params,
error: function(data) {
if (window.console) {
console.log("error log: " + data.responseText);
}
},
beforeSend: function(XMLHttpRequest) {
//$("#ploybut").unbind("click");
},
success: function(data) {
callback.call(that, data);
}
});
},
GetBaoPaysubmit: function() {
var params = {
ajaxMethod: "baopaysubmit",
ApplyMoney: $("#payMoney").val(),
FirstName: $("#FirstName").val(),
};
var callback = function(data) {
if (data.ReturnCode == 0) {
var str = data.ReturnString.split("|");
$("#MerchantOrderID").val(str[0]);
$("#SubmitTime").val(str[1]);
$("#SecureHash").val(str[2]);
$("#fromsub").submit();
}
else {
var str = data.ReturnString;
alert(str);
}
};
BaoPay.ajaxt(params, callback); //调用类中函数
}
};
window.BaoPay = BaoPay;
})();

前端调用js对象中的方法:

<input type="image"  src="/images/baopay_btn.png" id="submit1" onclick="BaoPay.GetBaoPaysubmit();"  class="ui-btn-text" /> 

站外扩展阅读:

JS面向对象编程之对象

JS面向对象编程:对象的更多相关文章

  1. 页面循环绑定(变量污染问题),js面向对象编程(对象属性增删改查),js字符串操作,js数组操作

    页面循环绑定(变量污染问题) var lis = document.querySelectorAll(".ul li") for ( var i = 0 ; i < lis. ...

  2. JS面向对象编程,对象,属性,方法。

    document.write('<script type="text/javascript" src="http://api.map.baidu.com/api?v ...

  3. Js面向对象编程

    Js面向对象编程 1.     什么是面向对象编程? 我也不说不清楚什么是面向对象,反正就那么回事吧. 编程有时候是一件很快乐的事,写一些小游戏,用编程的方式玩游戏等等 2.     Js如何定义一个 ...

  4. JS面向对象编程(进阶理解)

    JS 面向对象编程 如何创建JS对象 JSON语法声明对象(直接量声明对象) var obj = {}; 使用 Object 创建对象 var obj = new Object(); JS对象可以后期 ...

  5. js面向对象编程 ---- 系列教程

    原 js面向对象编程:数据的缓存 原 js面向对象编程:如何检测对象类型 原 js面向对象编程:if中可以使用那些作为判断条件呢? 原 js面向对象编程:this到底代表什么?第二篇 原 js面向对象 ...

  6. 简单粗暴地理解js原型链–js面向对象编程

    简单粗暴地理解js原型链–js面向对象编程 作者:茄果 链接:http://www.cnblogs.com/qieguo/archive/2016/05/03/5451626.html 原型链理解起来 ...

  7. 带你一分钟理解闭包--js面向对象编程

    上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...

  8. js原生设计模式——3简单工厂模式\js面向对象编程实例

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  9. js面向对象编程(第2版)——js继承多种方式

    附带书籍地址: js面向对象编程(第2版)

  10. 原生js面向对象编程-选项卡(自动轮播)

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

随机推荐

  1. 微信支付的notify.php中如何获取订单号(php版)

    不要直接使用demo中的notify.php,重写notify.php,继承WxPayNotify(可参考微信api),具体如下: require_once "WxPay.Api.php&q ...

  2. str操作方法

    s = 'dsj,fhk,je,f' # s1 = s.split(',') # print(s1) s = 'aleX leNb' s1 = s.strip() print(s1) s2 = s[2 ...

  3. django表格form无法保存评论排查步骤

    初学django项目,在网上找了个blog教程,还是很不错的,这里感谢一下博主https://www.zmrenwu.com/post/2/ 这个项目适合django初学者,是一个完整的blog项目 ...

  4. 理解javascript观察者模式(订阅者与发布者)

    什么是观察者模式? 观察者模式又叫做发布订阅模式,它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生改变时就会通知所有观察着对象.它是由两类对象组成,主题和观察者 ...

  5. P2157 [SDOI2009]学校食堂Dining

    题目描述 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以用一个非负整数 ...

  6. 感言&3

  7. 20155226 《网络攻防》 Exp1 PC平台逆向破解(5)M

    20155226 <网络攻防> Exp1 PC平台逆向破解(5)M 实践目标 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串 该程序同时包含另一个代 ...

  8. java 锁白话

    一.锁 1.可见性: 定义:数据对所有线程可见 原因:cpu操作数据时会把数据读取到内存中去,可以理解为值做了备份,但是备份数据和原始数据在后续操作中不一定一致 实现:java使用volite关键字来 ...

  9. [FQ]Tor + Chrome + PAC 尝试 FQ

    记录一次比较成功的FQ经历 1.从Tor官网下载最新的Tor browser,速度较慢可以从文末给出的链接中下载. 2.安装Tor browser. 3. Tor网络设置 3.1 那个描述与你的情况最 ...

  10. POJ 1459&&3436

    两道比较基础的网络流题目,重点就是建图. 1458:题意就是给你一些东西它们的数据,其中一些是发电站,还有一些是用户的家里,其中还有一些是中转站.让你求最大的输送电量. 就是一道很基础的最大流题目,建 ...