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。
新闻热点
疑难解答
图片精选