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 相关文章推荐
麦鸡的TAB切换功能结合了javascript和css
Dec 17 Javascript
javascript闭包的理解和实例
Aug 12 Javascript
用JavaScript计算在UTF-8下存储字符串占用字节数
Aug 08 Javascript
javascript瀑布流式图片懒加载实例解析与优化
Feb 23 Javascript
JS实现的多张图片轮流播放幻灯片效果
Jul 22 Javascript
ES6中的箭头函数实例详解
Apr 06 Javascript
jQuery 循环遍历改变a标签的href(实例讲解)
Jul 12 jQuery
layui--js控制switch的切换方法
Sep 03 Javascript
jQuery实现全选、反选和不选功能的方法详解
Dec 04 jQuery
高性能js数组去重(12种方法,史上最全)
Dec 21 Javascript
vue-router 控制路由权限的实现
Sep 24 Javascript
vue element实现表格合并行数据
Nov 30 Vue.js
如何让浏览器支持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
Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
2008/10/13 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
2018/06/22 PHP
jQuery语法总结和注意事项小结
2012/11/11 Javascript
javascript静态页面传值的三种方法分享
2013/11/12 Javascript
探讨jQuery的ajax使用场景(c#)
2013/12/03 Javascript
Jquery插件easyUi表单验证提交(示例代码)
2013/12/30 Javascript
js拖拽一些常见的思路方法整理
2014/03/19 Javascript
JS实现静止元素自动移动示例
2014/04/14 Javascript
jquery通过visible来判断标签是否显示或隐藏
2014/05/08 Javascript
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
2015/01/13 Javascript
详解JavaScript的AngularJS框架中的表达式与指令
2016/03/05 Javascript
详解Javascript继承的实现
2016/03/25 Javascript
js实现常用排序算法
2016/08/09 Javascript
微信小程序 Storage API实例详解
2016/10/02 Javascript
原生js实现秒表计时器功能
2017/02/16 Javascript
iscroll实现下拉刷新功能
2017/07/18 Javascript
VUE中的无限循环代码解析
2017/09/22 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
浅谈如何通过node.js对数据进行MD5加密
2018/05/16 Javascript
JavaScript使用类似break机制中断forEach循环的方法
2018/11/13 Javascript
详解React项目中碰到的IE问题
2019/03/14 Javascript
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
2019/11/12 Javascript
Python的time模块中的常用方法整理
2015/06/18 Python
Python的string模块中的Template类字符串模板用法
2016/06/27 Python
Python中矩阵创建和矩阵运算方法
2018/08/04 Python
Python小程序之在图片上加入数字的代码
2019/11/26 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
2020/02/25 Python
django 扩展user用户字段inlines方式
2020/03/30 Python
使用gunicorn部署django项目的问题
2020/12/30 Python
CSS3中的clip-path使用攻略
2015/08/03 HTML / CSS
办公室前台的岗位职责
2013/12/20 职场文书
2014年入党积极分子党课学习心得体会模板
2014/04/03 职场文书
房屋买卖协议样本
2014/11/16 职场文书
安装工程师岗位职责
2015/02/13 职场文书
感恩教育主题班会
2015/08/12 职场文书
python如何读取.mtx文件
2021/04/22 Python