JS面向对象编程:对象
一般面向过程的写法都是写很多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面向对象编程(对象属性增删改查),js字符串操作,js数组操作
页面循环绑定(变量污染问题) var lis = document.querySelectorAll(".ul li") for ( var i = 0 ; i < lis. ...
- JS面向对象编程,对象,属性,方法。
document.write('<script type="text/javascript" src="http://api.map.baidu.com/api?v ...
- Js面向对象编程
Js面向对象编程 1. 什么是面向对象编程? 我也不说不清楚什么是面向对象,反正就那么回事吧. 编程有时候是一件很快乐的事,写一些小游戏,用编程的方式玩游戏等等 2. Js如何定义一个 ...
- JS面向对象编程(进阶理解)
JS 面向对象编程 如何创建JS对象 JSON语法声明对象(直接量声明对象) var obj = {}; 使用 Object 创建对象 var obj = new Object(); JS对象可以后期 ...
- js面向对象编程 ---- 系列教程
原 js面向对象编程:数据的缓存 原 js面向对象编程:如何检测对象类型 原 js面向对象编程:if中可以使用那些作为判断条件呢? 原 js面向对象编程:this到底代表什么?第二篇 原 js面向对象 ...
- 简单粗暴地理解js原型链–js面向对象编程
简单粗暴地理解js原型链–js面向对象编程 作者:茄果 链接:http://www.cnblogs.com/qieguo/archive/2016/05/03/5451626.html 原型链理解起来 ...
- 带你一分钟理解闭包--js面向对象编程
上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...
- js原生设计模式——3简单工厂模式\js面向对象编程实例
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- js面向对象编程(第2版)——js继承多种方式
附带书籍地址: js面向对象编程(第2版)
- 原生js面向对象编程-选项卡(自动轮播)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
随机推荐
- PHP生成有背景的二维码图,摘自网络
有一天产品MM高高兴兴的走过来,兴奋的和我分享她想出来的一个新的idea. 产品MM:你看这个(她指了指她的手机),一脸兴奋 那是一张带着二维码的图片,内容如下: 她接着说:如果我们的分销也能做成类似 ...
- (转)公有云vr客户端tcp连接数太多造成 系统卡顿问题 [bittorrent tracker优化] -公有云常见网络问题及思路
在公有云服务器 发现使用tcp(http)的tracker连接数太多 用户太多会造成windows系统卡顿 特此发表一下修改配置和路由器的方法 解决卡顿问题 解决方法1(参考内容): 修改 /etc/ ...
- day31
今日内容 在python中使用TCP协议的客户端与服务端进行通信 服务端代码: ############################################################ ...
- jqgrid 设置多表头
有时,我们需要给jqgrid设置多表头信息,多表头区域会有行合并/列合并,如何实现? 1)通过jqgrid的 setGroupHeaders 方法来实现一个行的多表头, 2)如果有多行表头,需要设置多 ...
- CAN总线学习总结——错误帧和错误状态
CAN总线学习总结——错误帧和错误状态 标签: 数据 / 错误帧 / 错误状态 / CAN总线 / 总线协议 253 一.五种CAN总线可能发生的错误 1.CRC错误: 接收节点计算出的CRC校验值, ...
- 没事做的Delphi版的俄罗斯方块游戏Demo
源代码下载
- 20155308《网络攻防》 Exp1 PC平台逆向破解(5)M
20155308<网络攻防> Exp1 PC平台逆向破解(5)M 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是 ...
- Asp.Net StateServer实现共同域名下Session共享
概述 在实验的时候,参照了多方的信息,确实成功了,这里简单记录一下. 我们知道,在Asp.Net的Web.Config文件中,System.Web节点下,有个sessionState节点,它说明了应用 ...
- linux gz 解压缩
Linux压缩保留源文件的方法:gzip –c filename > filename.gzLinux解压缩保留源文件的方法:gunzip –c filename.gz > filenam ...
- [Deep-Learning-with-Python]基于Kears的Reuters新闻分类
Reuters数据集下载速度慢,可以在我的repo库中找到下载,下载后放到~/.keras/datasets/目录下,即可正常运行. 构建神经网络将路透社新闻分类,一共有46个类别.因为有多个类别,属 ...