为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript深入浅出

Bosn 资深架构师
难度中级
时长 5小时28分
学习人数
综合评分9.60
492人评价 查看评价
9.8 内容实用
9.5 简洁易懂
9.5 逻辑清晰
  • 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)

    https://img1.sycdn.imooc.com//5cd90b5200019a8305720257.jpg

    查看全部
  • 链式调用:

    https://img1.sycdn.imooc.com//5cd907bd00016ec703950267.jpg

    查看全部
  • 调用子类方法:

    Person为基类,Student是子类

    https://img1.sycdn.imooc.com//5cd907270001397b04490310.jpg

    查看全部
  • 因为JavaScript是弱类型,没有相关的机制支持重载(Java中可以通过参数个数和参数类型区分同名的函数),但可以模拟重载。

    下面是简单实现重载的例子:

    https://img1.sycdn.imooc.com//5cd906b60001264702510260.jpg

    https://img1.sycdn.imooc.com//5cd906c100017e5c02820156.jpg


    查看全部

举报

0/150
提交
取消
课程须知
1.您至少学习了本站“JS入门”、“JS进阶”两门基础课程。 2.如您具备一定实践经验对学习有很大帮助。 3.如您没有脚本编程开发经验,学习过程有可能会受挫部分内容或示例代码,请“暂时略过不懂的部分,后面章节会阐述”,当然想透彻学习,还需大量实践来体会知识的内涵。
老师告诉你能学到什么?
结合实例,深入解析以下知识内容: 1. 数据类型、表达式和运算符、语句; 2. 对象、数组、变量、函数; 3. this、闭包和作用域; 4. OOP; 5. 正则与模式匹配。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!