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 ...
随机推荐
- 分析占用了大量CPU处理时间的java进程中的进程
分析占用了大量 CPU 处理时间的是Java 进程中哪个线程 下面是详细步骤: 1. 首先确定进程的 ID ,可以使用 jps -v 或者 top 命令直接查看 2. 查看该进程中哪个线程占用大量 C ...
- Postman-自动化传参
一,自动化传参 在实现接口自动测试的时候,会经常遇到接口参数依赖的问题,例如调取登录接口的时候,需要先获取登录的key值,而每次请求返回的key值又是不一样的,那么这种情况下,要实现接口的自动化,就要 ...
- C++的命名空间的使用
C++语言引入命名空间(Namespace)这一概念主要是为了避免命名冲突,其关键字为 namespace. 科技发展到如今,一个系统通常都不会仅由一个人来开发完成,不同的人开发同一个系统,不可避免地 ...
- 【转】常见的Web实时消息交互方式和SignalR
https://www.cnblogs.com/Wddpct/p/5650015.html 前言 1. Web消息交互技术1.1 常见技术1.2 WebSocket介绍1.3 WebSocket示例 ...
- 【转】python直接运行tcl脚本
python中调用tcl是通过加载TkInter来实现的. from Tkinter import Tcl tcl = Tcl() tcl.eval('source tu.tcl') tcl.eval ...
- 如何判断Android设备是否为模拟器
android.os.Build.BRAND:获取设备品牌 如果获取的Landroid/os/Build;->BRAND的值为 "generic"则为模拟器上运行. andr ...
- 20155218 《网络对抗技术》 MAL_恶意代码分析
20155218 <网络对抗技术> MAL_恶意代码分析 实验内容: 1.使用schtasks指令监控系统运行 1.在C盘下新建一个文本文档,输入一下内容后,更名为netstatlog.b ...
- Java中枚举的写法和用法
在公司代码中,用了一大堆的枚举,看得我好懵逼.下面开始看看枚举怎么写和怎么用. 一.枚举的写法 关于枚举的写法,网上好多这方面的知识.这里直接贴一个我自己写的枚举类的代 ...
- vue 使用 proxyTable 解决跨域问题
1.在 main.js 中,在引入 axios: import axios from 'axios' Vue.config.productionTip = false Vue.prototype.$a ...
- BeginPaint 和 GetDC 的一个区别
这个问题是在做9*9乘法表这个课后习题发现的-- 先给出我的结论:注意在 WM_PAINT 下不要使用hdc = GetDC(hwnd)的方式,因为这样会不停的触发WM_PAINT消息! 东西看上去就 ...