源码网,源码论坛,源码之家,商业源码,游戏源码下载,discuz插件,棋牌源码下载,精品源码论坛

 找回密码
 立即注册
查看: 207|回复: 18

[JavaScript] javascript面向对象特性代码实例

[复制链接]

7万

主题

861

回帖

32万

积分

论坛元老

Rank: 8Rank: 8

积分
329525
发表于 2018-12-25 05:52:43 | 显示全部楼层 |阅读模式
这篇文章主要介绍了javascript面向对象特性代码实例,包括类、静态成员、对象、重载,需要的朋友可以参考下

一、基本的类的使用
方法一:
复制代码 代码如下:
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

回复

使用道具 举报

2

主题

2万

回帖

69

积分

注册会员

Rank: 2

积分
69
发表于 2022-8-16 16:18:21 | 显示全部楼层
额风风风微风微风违法
回复 支持 反对

使用道具 举报

4

主题

2万

回帖

303

积分

中级会员

Rank: 3Rank: 3

积分
303
发表于 2022-9-11 05:34:08 | 显示全部楼层
儿飞飞微风DVD谁vdsvd
回复 支持 反对

使用道具 举报

16

主题

2万

回帖

174

积分

注册会员

Rank: 2

积分
174
发表于 2022-9-14 20:27:44 | 显示全部楼层
挺不错的东西
回复 支持 反对

使用道具 举报

13

主题

2万

回帖

97

积分

注册会员

Rank: 2

积分
97
发表于 2023-1-21 19:15:10 | 显示全部楼层
看看怎么样再说
回复 支持 反对

使用道具 举报

4

主题

1万

回帖

60

积分

注册会员

Rank: 2

积分
60
发表于 2023-9-7 02:58:22 | 显示全部楼层
哦哦哦哦哦哦哦哦哦
回复 支持 反对

使用道具 举报

4

主题

1万

回帖

60

积分

注册会员

Rank: 2

积分
60
发表于 2023-10-2 15:09:25 | 显示全部楼层
挺不错的东西
回复 支持 反对

使用道具 举报

6

主题

1万

回帖

174

积分

注册会员

Rank: 2

积分
174
发表于 2024-2-29 14:35:51 | 显示全部楼层
2222222222222222
回复 支持 反对

使用道具 举报

7

主题

2万

回帖

288

积分

中级会员

Rank: 3Rank: 3

积分
288
发表于 2024-6-15 05:34:28 | 显示全部楼层
那三门,你们谁寂寞才快乐撒
回复 支持 反对

使用道具 举报

1

主题

2万

回帖

319

积分

中级会员

Rank: 3Rank: 3

积分
319
发表于 2024-6-23 07:33:05 | 显示全部楼层
那三门,你们谁寂寞才快乐撒
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

手机版|小黑屋|网站地图|源码论坛 ( 海外版 )

GMT+8, 2025-2-2 02:45 , Processed in 0.199170 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表