首页 > 语言 > JavaScript > 正文

JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和

2024-05-06 15:00:49
字体:
来源:转载
供稿:网友

1.Object类

在JS中,Object是所有类的基类,使用Object类来创建自定义对象时,可以无需定义构造函数(constructor,prototype,hasOwnProperty(property))

var per = new Object();per.name = 'zhangsan';per.age = ;alert(per.name + per.age);

我们想在程序中得到一个对象变量,只要能存储大量数据即可,这个时候,我们可以考虑使用Object类。Object类避免了对构造器的定义。 Object类下另一个常用的属性:hasOwnProperty

var per = new Object();per.name = 'zhangsan';per.age = ;if per.hasOwnProperty('email'){alert('具有email');}else{alert('无email');}

2.静态属性

在有些面向对象的语言当中,可以使用static关键字定义类的静态属性或者静态方法,在JS中,可以进行模拟。

语法:

类名.属性名

类名.属性=function(){}

function Person(){}Person.count = ;var p = new Person();Person.count++;var p = new Person();Person.count++;var p = new Person();Person.count++;alert(Person.count);

添加静态属性和静态方法:

function Person(){Person.count++; //静态属性Person.getCount=function(){ //静态方法alert('当前共有' + Person.count + '个人');}}Person.count = ;var p = new Person();var p = new Person();var p = new Person();Person.getCount();

3.闭包

概念:所谓闭包,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因此这些变量也是该表达式的一部分。

提出一个问题:

function display(){var i=; }display();//在这里,想访问局部变量i

在全局中,不能访问局部变量i,因为作用域不同,而且,在display函数执行完毕后,局部变量i会被回收。 闭包的功能:“访问局部变量”和“使变量所占的内存不被释放”

//例function fn(){function fn(){alert('hello');}return fn; //返回fn函数首地址}var test=fn(); //test也指向了fn函数的首地址test();

通过例1我们知道:变量是可以指向函数的首地址的,函数也可以返回另一个函数的首地址。

//例function fn(){var i = ;function fn(){alert(i);}return fn; //返回fn函数首地址}var test=fn(); //test也指向了fn函数的首地址test();

通过例2我们知道:使用一个拒不函数包含变量i,这样局部变量i的内存不会被回收。

//例function fn(){var i = ;function fn(){alert(i++);}return fn; //返回fn函数首地址}var test=fn(); //test也指向了fn函数的首地址test();test();test();

在例3中,因为i的内存永远不会被回收,所以每次调用fn2,i的值会+1。运行的结果是弹出10,弹出11,弹出12。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选