-
没有块级作用域
var i=0;
for(;i<10;i++){}
和
for(var i=0;i<10;i++){}
是一样的,变量i的声明是没有区别的
查看全部 -
Typeof适合基本类型检测,遇到null失效
[[Class]]通过{}.toString拿到,适合内置对象和基元类型遇到null和undefined失效
instanceof适合自定义对象也可以用来检测原生对象,在不同iframe和window间失效
查看全部 -
不同window或iframe之间对象类型检测不能用instanceof
查看全部 -
//函数前面加上!表示立即执行,如!function(global){}(this);传入this值作为形参global; !function(global){ //定义基站的实例属性,用构造函数模式 function DetectorBase(configs){ if(!this instanceof DetectorBase){ throw new Error('Do not invoke without new.'); } this.configs=configs; this.analyze(); } //定义基站的实例共享属性detect和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(containers){ if(!this instanceof ContainerDetector){ throw new Error('Do not invoke without new.'); } this.containers=containers; DetectorBase.apply(this,arguments); } //让链接和容器探测器都继承基站的共享属性 inherit(LinkDetector,DetectorBase); inherit(ContainerDetector,DetectorBase); //定义链接和容器探测器的实例共享属性 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.containers); }; //冻结探测器的属性特性,以防被修改 Object.freeze(DetectorBase.prototype); Object.freeze(DetectorBase); Object.freeze(LinkDetector); Object.freeze(LinkDetector.prototype); Object.freeze(ContainerDetector); Object.freeze(ContainerDetector.prototype); //将探测器方法变为global这个传入的全局变量的属性,可以将方法传出到全局环境中 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 #ddfe #fasdfa"); var ld=new LinkDetector("http://www.baidu.com http://www.baidu.com http://www.baidu.com"); cd.detect(); ld.detect(); console.log(cd.data); console.log(cd.containers);
查看全部 -
模块化,让内部变量不会跑到外面去。
查看全部 -
defineProperty,定义属性
查看全部 -
链式调用: 用返回 return this,实现链式调用
查看全部 -
调用子类方法。
查看全部 -
模拟重载:对传入的参数值进行判断,然后再给与不同的执行方法。
查看全部 -
重载的概念,可以在类里写相同名字的方法,但有不同的类型和参数数量,实例化的对象可以通过不同的参数数量和不同类型来调用相对应的方法。
查看全部 -
原型链上有的,用instanceof就能返回true
查看全部 -
instanceof : 左边是一个对象,右边是一个函数。查看左边的对象,是否在右边函数的原型链中。
查看全部 -
再记一次,hasOwnProperty检查属性是否在检查的对象上。
查看全部 -
动态改变原型的属性值,会影响已经存在实例化对象的属性值。动态改变原型的属性,相应已经实例化对象的对应属性值并不会改变。新实例化对象对应属性值会改变。
查看全部 -
基于原型链的继承演示图。
查看全部
举报
0/150
提交
取消