-
try{} //抛出异常
catch(){} //捕获异常
finally{} //最后必须执行
catch 或 finally 或 catch+finally
嵌套时如图:抛出异常,如果内部没有捕获异常,则必须先执行finally再被外部捕获异常
查看全部 -
如果在函数内部定于var a=b=1;
a为局部变量,b为全局变量
在函数外能访问b
应该为 var a=1,b=1;
查看全部 -
没有块级作用域
查看全部 -
逗号运算符,只取最后一个数
查看全部 -
类型检测:type of ; 返回相应的类型
但是对象Object类型用type of 无法检测出来;例如数组:只会返回Object.
使用 (obj instanceof Object)判断:原理:左边的obj的原型链上是否有右边Object的prototype属性 (在不同iframe和window间检测时失效)
Object.prototype.toString
查看全部 -
var a = "string";
定义一个变量a,也可以像对象一样使用(属性)的原因:系统会给变量a生成一个临时的包装对象,使a.length、a.t = 3等生效,返回该值,但是返回后,相应的包装对象会被销毁。
查看全部 -
数字->字符串:(加法-字符串拼接)num+""
字符串->数字:(减法-数字减法)num-0
查看全部 -
js语句,没有块级作用域,循环后,在外面拿的变量的值是最后一个值查看全部
-
num - 0 num转为整形 num + " num转为字符类型查看全部
-
!function(global){
function DetectorBase(configs){
if(!this instanceof DetectorBase){
throw new Error("Don't invoke without new");
}
this.configs = configs;
this.analyze();
}
DetectorBase.prototype.detect = function(){
throw new Error('Not implemented');
};
DetectorBase.prototype.analyze = function(){
console.log('analyzing...');
this.data = '###data###';
};
function LinkDetector(links){
if(!this instanceof LinkDetector){
throw new Error('Do not invoke without new');
}
this.links = links;
DetectorBase.apply(this,arguments);
}
function ContainerDetector(contaiers){
if(!this instanceof ContainerDetector){
throw new Error('Do not invoke without new');
}
this.contaiers = contaiers;
DetectorBase.apply(this,arguments);
}
//inherit first
inherit(LinkDetector,DetectorBase);
inherit(ContainerDetector,DetectorBase);
//expand later
LinkDetector.prototype.detect = function(){
console.log('Loading data: '+this.data);
console.log('Link detection started.');
console.log('Scaning links: '+this.links);
};
ContainerDetector.prototype.detect = function(){
console.log('Loading data: '+this.data);
console.log('Container detection started.');
console.log('Scaning Containers: '+this.links);
};
//prevent from being altered
Object.freeze(DetectorBase);
Object.freeze(DetectorBase.prototype);
Object.freeze(LinkDetector);
Object.freeze(LinkDetector.prototype);
Object.freeze(ContainerDetector);
Object.freeze(ContainerDetector.prototype);
//export to global object
Object.defineProperties(global,{
LinkDetector:{value:LinkDetector},
ContainerDetector:{value:ContainerDetector},
DetectorBase:{value:DetectorBase}
});
function inherit(subClass,superClass){
subClass.prototype = Object.create(superClass.prototype);
subClass.prototype.constructor = subClass;
}
}(this);
var cd = new ContainerDetector('#abc #def #ghi');
var Id = new LinkDetector('http://www.taobao.com http://www.tmall.com http://www.baidu,com');
cd.detect();
Id.detect();
查看全部 -
模块化:可以看看一些模块化工具,如:requirjs
查看全部 -
抽象类:ES6查看
defineProperty(ES5)
查看全部 -
链式调用:
查看全部 -
调用子类方法:
Person为基类,Student是子类
查看全部 -
因为JavaScript是弱类型,没有相关的机制支持重载(Java中可以通过参数个数和参数类型区分同名的函数),但可以模拟重载。
下面是简单实现重载的例子:
查看全部
举报