javascript面向对象特性代码实例


Posted in Javascript onJune 12, 2014

一、基本的类的使用
方法一:

function sth(a) // 构造函数 
{ 
 this.a = a; 
 this.fun = output; // 成员函数 
} 
function output(a, b, c) 
{ 
 document.write(this.a); 
} 
//调用
var s = new sth(250); 
s.fun(1, 2, 3); 
ouput(1, 2, 3); //如果output在sth之前就是错的

方法二:

function sth(a) 
{   
 this.a = a; 
 this.output = function() 
 { 
  document.write(this.a); 
 } 
} var s = new sth(2); 
s.output(); // 输出2

二、继承
方法一:
function A(x) 
{ 
 this.x = x; 
} 
function B(x, y) 
{ 
 // 方法1 
 /* 
 this.construct = A; 
 this.construct(x); 
 delete this.construct; 
 */  
 // 方法2 
 //A.call(this, x); 
 // 方法3 
 A.apply(this, new Array(x)); // 亦可A.apply(this, arguments), 不过arguments参数顺序一定要对 
 this.y = y; 
 this.print = function() 
 { 
  document.write("x = ", x, 
         ", y = ", y); 
 } 
} 
var b = new B(1, 2); 
b.print();
alert(B instanceof A); // 输出false

优点:可以实现多继承(多调用call就好)

缺点:
· 必须以构造函数方式使用
· 使用instanceof运算符运算此类继承结果为false

方法二:

function A() 
{ 
} 
A.prototype.x = 1; 
function B() 
{ 
} 
B.prototype = new A(); // 不能带参数! 
B.prototype.y = 2;  
B.prototype.print = function() 
{ 
 document.write(this.x, ", ", this.y, "<br>"); 
} 
var b = new B(); 
b.print(); 
document.write(b instanceof A); // 输出true

缺点:
· 不能实现多继承
· 构造函数不带参数

Tips

通常使用混合模式,两者一起用

function A(x) 
{ 
 this.x = x; 
} 
A.prototype.printx = function()  // 写到A类里面this.printx = function....也是可以的,下同
{ 
 document.write(this.x, "<br>"); 
} function B(x, y) 
{ 
 A.call(this, x); 
 this.y = y; 
} 
B.prototype = new A(); // 不能带参数!  
B.prototype.printxy = function() 
{ 
 document.write(this.x, ", ", this.y, "<br>"); 
} 
var b = new B(1, 2); 
b.printx();  // 输出1 
b.printxy(); // 输出1, 2 
document.write(b instanceof A); // 输出true

三、类似静态成员函数的使用

function sth(a) 
{   
 this.a = a; 
} sth.fun = function(s) 
{ 
 document.write(s.a); 
} 
var s = new sth(2); 
sth.fun(s); // 输出2

四、对象的释放

var obj = new Object; // obj是引用
obj = null; // 取消引用,会自动进行垃圾回收;如果需要根本释放此对象,要将它的所有引用都赋值为null

五、函数对象

var v = new Function("arg1", "arg2", "document.write(arg1 + arg2);"); // 定义一个函数对象,参数分别是arg1,arg2 
v(1, 2); // 将会输出3

六、回调函数

function callback(func, arg) 
{ 
 func(arg); 
} function fun(arg) 
{ 
 document.write(arg); 
}
//callback(func, "sb"); // 这种做法不行 
var func = new Function("arg", "fun(arg);"); 
// 当然也可以把func(arg)换成具体的执行代码,   
// 但是函数代码庞大了就最好这样做了 
callback(func, "sb");

七、函数的重载

function fun() 
{ 
 switch (arguments.length) 
 { 
 case 1: 
  document.write(arguments[0]); 
  break; 
 case 2: 
  document.write(arguments[0] + arguments[1]); 
  break; 
 default: 
  document.write("ERROR!"); 
  break; 
 } 
} fun(1); 
fun(1, 2);

八、利用函数闭包实现有“静态变量”的函数

function fun() 
{ 
 var v = 1; 
 function fun2() 
 { 
  ++v; 
  document.write(v); 
  document.write("<br>"); 
  return v; 
 }  return fun2; 
} 
var func = fun(); 
func(); // 输出2 
func(); // 输出3 
func(); // 输出4
Javascript 相关文章推荐
不用MOUSEMOVE也能滑动啊
May 23 Javascript
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
Dec 28 Javascript
js调用浏览器打印模块实现点击按钮触发自定义函数
Mar 21 Javascript
javascript实现时间格式输出FormatDate函数
Jan 13 Javascript
教你如何使用firebug调试功能了解javascript闭包和this
Mar 04 Javascript
jQuery扩展+xml实现表单验证功能的方法
Dec 25 Javascript
对称加密与非对称加密优缺点详解
Feb 06 Javascript
JavaScript实现前端分页控件
Apr 19 Javascript
Vuex和前端缓存的整合策略详解
May 09 Javascript
JS中常用的消息框总结
Feb 24 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
Sep 29 Javascript
对angular4子路由&amp;辅助路由详解
Oct 09 Javascript
如何让浏览器支持jquery ajax load 前进、后退功能
Jun 12 #Javascript
js创建一个input数组并绑定click事件的方法
Jun 12 #Javascript
javascript实现阻止iOS APP中的链接打开Safari浏览器
Jun 12 #Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
Jun 12 #Javascript
深入理解javascript中的立即执行函数(function(){…})()
Jun 12 #Javascript
Javascript封装DOMContentLoaded事件实例
Jun 12 #Javascript
自己封装的javascript事件队列函数版
Jun 12 #Javascript
You might like
一个域名查询的程序
2006/10/09 PHP
PHP5函数小全(分享)
2013/06/06 PHP
php 微信开发获取用户信息如何实现
2016/12/13 PHP
php7连接MySQL实现简易查询程序的方法
2020/10/13 PHP
打开超链需要“确认”对话框的方法
2007/03/08 Javascript
比较详细的关于javascript 解析json的代码
2009/12/16 Javascript
checkbox勾选判断代码分析
2014/06/11 Javascript
JS实现的左侧竖向滑动菜单效果代码
2015/10/19 Javascript
[原创]Javascript 实现广告后加载 可加载百度谷歌联盟广告
2016/05/11 Javascript
JS计算两个数组的交集、差集、并集、补集(多种实现方式)
2019/05/21 Javascript
基于Vue+ElementUI的省市区地址选择通用组件
2019/11/20 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
2020/01/16 Javascript
Vue filter 过滤器、以及在table中的使用介绍
2020/09/07 Javascript
vue v-on:click传递动态参数的步骤
2020/09/11 Javascript
Python实现单词拼写检查
2015/04/25 Python
Python实现信用卡系统(支持购物、转账、存取钱)
2016/06/24 Python
Python爬虫包 BeautifulSoup  递归抓取实例详解
2017/01/28 Python
Django中数据库的数据关系:一对一,一对多,多对多
2018/10/21 Python
Python实现带参数的用户验证功能装饰器示例
2018/12/14 Python
3行Python代码实现图像照片抠图和换底色的方法
2019/10/10 Python
多个python文件调用logging模块报错误
2020/02/12 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
2020/02/18 Python
python实现打砖块游戏
2020/02/25 Python
解决django中form表单设置action后无法回到原页面的问题
2020/03/13 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
python中tab键是什么意思
2020/06/18 Python
python一些性能分析的技巧
2020/08/30 Python
用CSS3的box-reflect设置文字倒影效果的方法讲解
2016/03/07 HTML / CSS
澳大利亚UGG工厂直销:Australian Ugg Boots
2017/10/14 全球购物
《乌塔》教学反思
2014/02/17 职场文书
厂长岗位职责
2014/02/19 职场文书
大专毕业生自我鉴定范文(2篇)
2014/09/27 职场文书
党员作风建设自查报告
2014/10/23 职场文书
奠基仪式致辞
2015/07/30 职场文书
用php如何解决大文件分片上传问题
2021/07/07 PHP
一级电子管军用接收机测评
2022/04/05 无线电