这篇文章主要介绍了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

最新资讯
库克看好远程办公:苹果不会“回到过去的样子”

库克看好远程办公:苹果

苹果首席执行官蒂姆·库克(Tim Cook)称,员工远程工作的能
5G时代会有何生态变迁?智能应用愈丰但安全挑战加剧|新浪5G峰会

5G时代会有何生态变迁

在生态变迁分论坛上,奇安信董事长齐向东、完美世界CEO
苏宁收购家乐福中国一周年 张近东:家乐福的本土竞争力更强了

苏宁收购家乐福中国一

张近东认为,零售业已进入全场景时代,传统的卖场数字化转
立法者突然造访亚马逊仓库 对其员工保护提出质疑

立法者突然造访亚马逊

据报道,两名来自美国密歇根州的议员在参观了亚马逊公司
理想汽车将在全尺寸SUV采用NVIDIA自动驾驶智能芯片ORIN

理想汽车将在全尺寸SU

理想汽车与人工智能计算公司NVIDIA及NVIDIA中国合作伙
人送绰号「行走避雷针」,我长颈鹿绝非浪得虚名!

人送绰号「行走避雷针

今年早些时候,南非的环保主义者们发现两头长颈鹿被雷劈
最新文章
详解Vue的ref特性的使用

详解Vue的ref特性的使

这篇文章主要介绍了详解Vue的ref特性的使用,文中通过
vue学习笔记之slot插槽基本用法实例分析

vue学习笔记之slot插

这篇文章主要介绍了vue学习笔记之slot插槽基本用法,结
vue跳转方式(打开新页面)及传参操作示例

vue跳转方式(打开新页

这篇文章主要介绍了vue跳转方式(打开新页面)及传参操作,
vue学习笔记之过滤器的基本使用方法实例分析

vue学习笔记之过滤器

这篇文章主要介绍了vue学习笔记之过滤器的基本使用方
js获取本日、本周、本月的时间代码

js获取本日、本周、本

本篇文章给大家分享的内容是利用js如何获取本日、本周
node crawler如何添加promise支持

node crawler如何添加

这篇文章主要介绍了node crawler如何添加promise支持,