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 ...
随机推荐
- connection reset by peer问题总结及解决方案
找遍了 中英文网站,翻遍了能找的角落,发现了出现故障的原因和原理,及改如何处理,这里记录下,希望能帮助到有需要的小伙伴,少走点弯路, 以上就整理内容: connection reset by peer ...
- 【转载】python中利用smtplib发送邮件的3中方式 普通/ssl/tls
#!/usr/bin/python # coding:utf- import smtplib from email.MIMEText import MIMEText from email.Utils ...
- Python2.7-operator
operator 模块,没有什么特殊的,简单说就是把常用的数学计算符号(+,-,*,**,/,<<,>>等)逻辑运算(or,and,xor,is,is_not)等以函数形式表示 ...
- 调用类java.lang.Math的成员方法"public static double random"运算下面表达式10000次,统计其中生成的整数0,1,2,.....20的个数分别是多少,并输出统计结果.(int)(Math.random()*20+0.5)
public class Test2 { public static void main(String args[]){ int num; int count[]=new int[21]; for(i ...
- Android实现导航菜单随着ListView联动,当导航菜单遇到顶部菜单时停止在哪里,并且listview仍能滑动
需求:现要实现一个特殊UI的处理,如下图所示: 该布局的上面是一个“按钮”,中间是一个“空白布局(当然也可以是ViewPager等)”,下面是一个页面的导航菜单,底部是一个ListView. 要求:滑 ...
- P2731 骑马修栅栏 Riding the Fences
题目描述 John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个栅栏.你必须编一个程序,读入栅栏网络的描述,并计算出一条修栅栏的路径,使每个栅栏都恰好被经过一次.John能从任何一个顶 ...
- jquery ajax error函数和及其参数详细说明(转载)
使用jquery的ajax方法向服务器发送请求的时候,常常需要使用到error函数进行错误信息的处理,本文详细的说明了ajax中error函数和函数中各个参数的用法.一般error函数返回的参数有三个 ...
- Django Rest Framework源码剖析(七)-----分页
一.简介 分页对于大多数网站来说是必不可少的,那你使用restful架构时候,你可以从后台获取数据,在前端利用利用框架或自定义分页,这是一种解决方案.当然django rest framework提供 ...
- 20155216 Exp3 免杀原理与实践
Exp3 免杀原理与实践 基于特征码的改变来实现免杀(实践过程记录) MSF编码器编译后门检测 可以通过VirSCAN来检验后门抗杀能力. ps:选择后门前修改其文件名,不得含有数字. 如上图所示,3 ...
- 模拟赛 sutoringu
sutoringu 题意: 询问有多少一个字符串内有多少个个子区间,满足可以分成k个相同的串. 分析: 首先可以枚举一个长度len,表示分成的k个长为len的串.然后从1开始,每len的长度分成一块, ...