javascript高级技巧篇
Posted fqh123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript高级技巧篇相关的知识,希望对你有一定的参考价值。
安全的类型检测
在任何值上调用Object原生的toString()方法,都会返回一个[object NativeConstructorName]格式字符串。每个类在内部都有一个[[Class]]属性,这个属性中就指定了各个类型的构造函数名。
使用这种方法判断值属于什么类型最可靠;比如:
function isArray(value){
return Object.prototype.toString.call(value)=="[object Array]";
}
function isFunction(value){
return Object.prototype.toString.call(value)=="[object Function]";
}
function isRegExp(value){
return Object.prototype.toString.call(value)=="[object RegExp]";
}
判断是不是原生的JSON对象
function isNativeJSON(value){ return window.JSON&&Object.prototype.toString.call(value)=="[object JSON]"; }
在javascript中,自定义的构造函数上述方法检测都会返回[object object]。
作用域安全构造函数
function Person(name,age,job){
if(this instanceof Person){
this.name=name;
this.age=age;
this.job=job;
}else{
return new Person(name,age,job);
}
}
继承作用域安全的构造函数
function LittleBoy(classNum,name,age,job){
Person.call(this,name,age,job);//Person的作用域是安全的,this并不指向Person实例,所以必须让LittleBoy的原型链指向Person的实例
this.classNum=classNum;
this.getClassNum=function(){
return this.classNum;
}
}
LittleBoy.prototype=new Person();
惰性载入函数
在if判断后,将原函数重新定义,再次执行原函数时,就不用if判断了。也就是在一定环境下,只需第一次有if判断,后面就不需要if判断,从而提高性能。
防篡改对象
var person={name:"ha"};
Object.preventExtensions(person);//禁止再添加新属性和方法,但可以修改和删除现有的属性和方法
调用Object.isExtensible()方法可以判断对象是否可拓展
console.log(Object.isExtensible(person));//false
密封对象
Object.seal(person);//不能添加和删除属性和方法
判断是否是密封对象
Object.isSealed(person);
冻结对象
Object.freeze(person);//不能修改,不能添加,不能删除
判断是否被冻结
console.log(Object.isFrozen(person));//判断是否被冻结
以上是关于javascript高级技巧篇的主要内容,如果未能解决你的问题,请参考以下文章