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 ...
随机推荐
- vagrant up下载box慢的解决办法
即在运行vagrant up时得到其的下载路径,如: https://vagrantcloud.com/ubuntu/boxes/xenial64/versions/20190101.0.0/prov ...
- oracle 按条件删除、查询表
---查询表的名称,字段信息以及字段注释 select us.table_name, --表名 ut.COLUMN_NAME,--字段名称 uc.comments,--字段注释 ut.DATA_T ...
- JS五星级评分效果(类似与淘宝打分效果)
今天晚上研究下 五星级评分效果,类似于淘宝后台评分效果,如下图所示: 思路: 当鼠标移到一颗星的时候 判断当前的索引 当前及当前的索引前面的星星亮起来 每当移到任何一颗星星时候 下面跟随提示 mous ...
- Python2.7-heapq
heapq 模块,实现了堆序列算法,也叫优先序列算法.heap(堆)是每个父节点都小于等于子节点的树,同时所有节点k都满足 heap[k] <= heap[2*k+1] 和 heap[k] &l ...
- python+requests实现接口测试 - cookies的使用 (转载)
出自:https://www.cnblogs.com/nizhihong/p/6699492.html 在很多时候,发送请求后,服务端会对发送请求方进行身份识别,如果请求中缺少识别信息或存在错误的识别 ...
- HDU1875+Prim模板
https://cn.vjudge.net/problem/HDU-1875 相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府 ...
- Java UDP和TCP的区别
为什么要写这篇博客:是这样的,最近听朋友说,有不少公司面试的时候会问道TCP和UDp的却别,所以就写出一篇简单的来描述他们之间的区别,送给那些即将面试的朋友们. UDP: 1.UDP, a.将数据以及 ...
- IC设计推荐书籍
IC设计推荐书籍 听语音 | 浏览:779 | 更新:2014-07-19 10:52 1 2 3 4 5 6 7 分步阅读 接触IC设计这一行已经有7年的时间了,前面4年是大学本科,用来学习知识,现 ...
- CGAL学习:数据类型
CGAL 4.13 - Number Types 1 Introduction(介绍:略) 涉及到的数大致有3种:一是整数,二是有理数,三是浮点数.有理数可以用2个整数表示.精度上可分为任意精度和固定 ...
- BAT for 循环
@echo off echo.Current User is '%USERNAME%'echo.This script must run with administrative privileges ...