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 相关文章推荐
js最简单的拖拽效果实现代码
Sep 24 Javascript
jQuery中的.bind()、.live()和.delegate()之间区别分析
Jun 08 Javascript
JS获取select-option-text_value的方法
Dec 26 Javascript
javascript实现的字符串与十六进制表示字符串相互转换方法
Jul 17 Javascript
探索angularjs+requirejs全面实现按需加载的套路
Feb 26 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
Apr 06 Javascript
Javascript随机标签云代码实例
Jun 21 Javascript
浅谈angular4 ng-content 中隐藏的内容
Aug 18 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
Jan 27 Javascript
js判断一个对象是数组(函数)的方法实例
Dec 19 Javascript
使用Vue+Django+Ant Design做一个留言评论模块的示例代码
Jun 01 Javascript
uniapp开发小程序的经验总结
Apr 08 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
php将时间差转换为字符串提示
2011/09/07 PHP
解析php常用image图像函数集
2013/06/24 PHP
PHP中如何使用session实现保存用户登录信息
2015/10/20 PHP
变量在 PHP7 内部的实现(一)
2015/12/21 PHP
CI框架使用composer安装的依赖包步骤与方法分析
2016/11/21 PHP
PHP关于foreach复制知识点总结
2019/01/28 PHP
经验几则 推荐
2006/09/05 Javascript
javascript void(0)的妙用
2009/10/21 Javascript
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
jQuery插件实现多级联动菜单效果
2015/12/01 Javascript
javascript之Boolean类型对象
2016/06/07 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
2016/07/18 Javascript
JavaScript提高加载和执行效率的方法
2017/02/03 Javascript
jQuery插件FusionWidgets实现的AngularGauge图效果示例【附demo源码】
2017/03/23 jQuery
AngularJS 支付倒计时功能实现思路
2017/06/05 Javascript
javascript实现循环广告条效果
2017/12/12 Javascript
nodejs实现的连接MySQL数据库功能示例
2018/01/25 NodeJs
layui实现下拉复选功能的例子(包括数据的回显与上传)
2019/09/24 Javascript
jquery css实现流程进度条
2020/03/26 jQuery
python写入中英文字符串到文件的方法
2015/05/06 Python
深入理解NumPy简明教程---数组2
2016/12/17 Python
Python 实现随机数详解及实例代码
2017/04/15 Python
利用Python如何实现数据驱动的接口自动化测试
2018/05/11 Python
PyQt4实时显示文本内容GUI的示例
2019/06/14 Python
解释一下抽象方法和抽象类
2016/08/27 面试题
制定岗位职责的原则
2013/11/08 职场文书
珍珠奶茶店创业计划书
2014/01/11 职场文书
学生会部长竞聘书
2014/03/31 职场文书
会议室标语
2014/06/21 职场文书
客户付款通知书
2015/04/23 职场文书
商务宴会祝酒词
2015/08/11 职场文书
2016应届毕业生实习评语
2015/12/01 职场文书
公务员的复习计划书,请收下!
2019/07/15 职场文书
Python中zipfile压缩包模块的使用
2021/05/14 Python
Python Pygame实战之塔防游戏的实现
2022/03/17 Python