`
BuN_Ny
  • 浏览: 85489 次
  • 来自: 济南
社区版块
存档分类
最新评论

精通JavaScript: 专业JavaScript开发

阅读更多

 

* 语言特性 *

---------------------------------------------------------------------------

1.引用

  引用指向的只能是具体的对象,而不是另一个引用

  注意: 一些对象修改会生成新对象,如字符串拼接

2.重载

  重载依赖: A.判断传入参数数量; B.判断传入参数类型

  伪数组: argument

3.类型检查

  1) 方式一: 使用 typeof 操作符

 

if(typeof num == 'string') ...

 

  2) 方式二: 构造函数

 

if(num.constructor == String) ...

 

4.作用域

  --> 作用域由函数划分而不是由块划分

  --> 基于浏览器的javascript中,所有属于全局作用域的变量其实都是window对象的属性

  --> 如果变量没有显示定义,它就是全局定义的

5.闭包

  1) 优化编码方式

 

    setTimeout('otherFunction('+num+','+num2+')', 1000);

     可改为形如:

    function someFunction(msg, time){
      setTimeout(function(){
        alert(msg);
      }, time);
    }

   2) 实现函数Curry化

 

    function addGenerator(num){
      return function(toAdd){
        return num + toAdd;
      };
    }
    var addFive = addGenerator(5);
    alert(addFive(4) == 9);

   3) 使用匿名函数隐藏全局作用域变量

 

    (function(){
      var msg = '';
      //...
    })();

   4) 使用匿名函数激发出创建多个使用闭包的函数所需的作用域

 

     var obj = document.getElementById('main');

     var items = ['click', 'mouseover'];

     for(var i=0,len=items.length; i<len; ++i){

       (function(){

         var item = items[i];

         //如果没有外层匿名函数,这个闭包将只注册mouseover事件

         obj['on'+item] = function(){

           alert('正在'+item);

         }

       })();

     }

6.上下文

 

  var obj = {
    yes: function(){
      this.val = true;
    },
    no: function(){
      this.val = false;
    }
  };
  alert(obj.val==null); //没有val属性
  obj.yes();
  alert(obj.val==true); //val属性为true
  window.no = obj.no;   //切换了上下文
  window.no();
  alert(obj.val==true); //obj的val不变
  alert(window.val==true); //window的val被更新

   --> 使用 call 或 apply 调用,更易于理解

 

 


 

* 面向对象基础 *

---------------------------------------------------------------------------

1.公共方法

 

  function User(name){
    this.name = name;
  }
  //其上下文是实例化后的对象
  User.prototype.getName = function(){
    return this.name;
  }

   核心在于prototype属性的理解应用

2.私有方法

 

  function Classroom(teachers){
    var disp = function (){
      //... 私有方法的一些操作
    }
    this.teachers = teachers;
    disp();
  }
  var class = new Classroom(['Mr.Smith', 'Mr.Lee']);
  //class.disp(); 这样写会报错,disp对外不可见

 3.特权方法

 

  function User(name, age){
    var year = (new Date()).getFullYear() - age;
    this.getYearBorn = function(){
      return year;
    }
  }

   特权方法(getYearBorn)是动态生成的,比往prototype上绑定方法开销大,但更灵活

4.静态方法

 

  User.cloneUser = function(user){
    return new User(user.getName(), user.getAge());
  }

 

  1) 唯一优点: 保证对象的命名空间整洁

  2) 仅为组织代码而使用的方法

  3) 实质与其他一般函数没区别

 

 

 

 


* 标准化面向对象的代码 *

---------------------------------------------------------------------------

1.原型式继承

  1) 原理: 对象的构造函数可以从其他对象中继承方法,它创建出一个原型对象后,所有

           其他的新对象都可以基于这个原型对象来构建

  2) 原型式继承的设计适用于单继承而非多继承

  3) 使用示例:

 

    function Person(name){
      this.name = name;
    }
    Person.prototype.getName = function(){
      return this.name;
    }
    function User(name, password){
      this.name = name;
      this.password = password;
    }
    User.prototype = new Person();  //关键代码!继承Person对象的所有方法
    User.prototype.getPassword = function(){
      return this.password;
    }

2.类式继承

 

  Function.prototype.method = function(name, fn){
    this.prototype[name] = fn;
    return this;
  }
  Function.method('inherits', function(parent){
    var depth = 0;
    var proto = this.prototype = new parent();
    
    this.method('uber', function uber(name){
      var func, ret, v = parent.prototype;

      if(depth){
        for(var i=depth; i>0; --i){
          v = v.constructor.prototype;
        }
        func = v[name];
      }else{
        func = proto[name];
        if(func == this[name]){
          func = v[name];
        }
      }
      ++depth;
      ret = func.apply(this, Array.prototype.slice.apply(arguments, [1]));
      --depth;
      return ret;
    });
    return this;
  });
  Function.method('swiss', function(parent){
    for(var i=1,len=arguments.length; i<len; ++i){
      var name=arguments[i];
      this.prototype[name] = parent.prototype[name];
    }
    return this;
  });

  function Person(name){
    this.name = name;
  }
  Person.method('getName', function(){
    return this.name;
  });
  function User(name, password){
    this.name = name;
    this.password = password;
  }
  User.inherits(Person);
  User.method('getPassword', function(){
    return this.password;
  });
  User.method('getName', function(){
    return 'My name is ' + this.uber('getName');
  });
 

 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    精通JavaScript源代码.rar

    《精通JavaScript》这本书深入浅出地介绍了JavaScript的各个方面,旨在帮助读者从新手进阶到高级开发者。其附带的源代码压缩包“精通JavaScript.rar”包含了381个示例,覆盖了书中讲解的各种技术点。 在JavaScript...

    精通JavaScript jquery之父力作 附源码

    《精通JavaScript:jQuery之父力作 附源码》是一本深入探讨JavaScript编程技术的书籍,作者在jQuery领域的权威使得这本书具有极高的学习价值。本书旨在帮助读者从基础到高级,全面掌握JavaScript语言,尤其注重实际...

    精通JavaScriptPDF版本下载.txt

    根据提供的文件信息,我们可以推断出这是一份关于《精通JavaScript》这本书的PDF版本下载链接。但是,为了更好地满足您的需求,我将基于这个主题展开更详细的解释与介绍,包括JavaScript的基本概念、特点以及学习...

    Pro JavaScript Techniques(jQuery之父作品:精通Javascript英文原版+源码)

    通过学习《Pro JavaScript Techniques》,开发者不仅能提升JavaScript编程技能,还能了解到许多专业级的开发技巧和最佳实践,对于进阶成为JavaScript专家具有极大的帮助。无论你是初学者还是经验丰富的开发者,这...

    《精通JavaScript》

    ### 精通JavaScript #### 一、JavaScript简介与历史 JavaScript是一种广泛使用的脚本语言,在Web开发领域占据着举足轻重的地位。它最初由网景公司在1995年设计并实现,并且在ECMA国际组织的支持下,成为了一种标准...

    精通JavaScript(源代码) jQuery之父John Resig所写

    《精通JavaScript(源代码)》是一本深度和广度兼具的JavaScript进阶教程,它不仅涵盖了语言基础,更深入到jQuery的源码解析,让读者能够在理解JavaScript的基础上,更好地应用和扩展jQuery,从而提升Web开发的效率和...

    精通JavaScript2015

    《精通JavaScript2015》是一本专注于JavaScript编程技术的专著,旨在帮助读者深入了解和掌握2015年版本的JavaScript语言的核心概念和技术。在那个时期,JavaScript已经成为了Web开发不可或缺的一部分,尤其是在前端...

    精通JavaScript.pdf

    在提供的文件"精通JavaScript.jQuery.pdf"中,我们可以期待找到关于JavaScript深入理解和使用jQuery的教程。jQuery的学习将帮助开发者更好地掌握如何利用JavaScript来处理网页交互、动画效果和数据请求。通过学习这...

    精通JavaScript 书籍源代码

    这本书“精通JavaScript”深入探讨了该语言的核心概念和技术,旨在帮助开发者提升技能至专业水平。源代码提供了书中所有实例的实践参考,使得学习过程更加直观和有效。 在“精通JavaScript”中,你可以了解到以下...

    精通JavaScript动态网页编程(实例版

    函数式编程在JavaScript中也有着重要地位,比如闭包、高阶函数、Promise 和异步编程等,这些都是现代JavaScript开发中不可或缺的技能。特别是异步处理,对于处理网络请求、文件读写等耗时操作至关重要。 ES6...

    JavaScript - The Definitive Guide 4th edtion

    总的来说,这本书是学习和精通JavaScript的宝贵资源,无论你是初学者还是经验丰富的开发者,都可以从中受益。通过阅读和实践书中的例子,你可以深入了解JavaScript的精髓,提升自己的编程技能,从而更好地利用...

    精通JavaScript(John Resig)

    《精通JavaScript》是John Resig所著的一部经典JavaScript教程,尤其因其作者是jQuery的创建者而备受关注。这本书深入浅出地介绍了JavaScript这门语言的各个方面,旨在帮助读者不仅理解JavaScript的基础,还能掌握其...

    精通javascript书及源码

    "精通JavaScript书及源码"这个主题涵盖了深入理解JavaScript语言原理、最佳实践以及实际应用等多个方面。 首先,JavaScript语法基础是所有学习者必须掌握的。这包括变量声明(var、let、const)、数据类型(原始...

    精通JavaScript(中文清晰优化版)

    精通JavaScript意味着能够熟练地运用它来创建交互式、动态的网页内容,提升用户体验,实现复杂的功能。这份“精通JavaScript(中文清晰优化版)”的资源,显然是为了帮助开发者深入理解和掌握这门语言,提供了中文...

    精通JavaScript+jQuery(实例)

    14. jQuery插件开发:学习如何编写和使用自定义的jQuery插件。 15. 实战项目:通过实际项目巩固所学知识,提升实战能力。 16. 总结与回顾:复习关键知识点,为后续学习打下坚实基础。 17. 面向对象编程:深入理解...

    精通Javascript+jQuery视频下载

    JavaScript 和 jQuery 是 ...总之,精通 JavaScript 和 jQuery 对于任何想要在 web 开发领域有所建树的人来说都是至关重要的。这个资源将帮助开发者快速掌握这两门技术,从而能够构建出更加动态、用户友好的 web 应用。

    精通JavaScript源代码

    要精通JavaScript源代码,我们需要深入理解其核心概念,包括变量、数据类型、作用域、函数、闭包、原型链以及面向对象编程。 首先,JavaScript中的变量通过`var`、`let`或`const`关键字声明,具有动态类型,意味着...

    精通javascript 源代码

    8. **ES6及以后的新特性**:包括箭头函数、模板字符串、解构赋值、类(class)、模块(import/export)、生成器(generator)和async/await等,这些都是现代JavaScript开发的重要组成部分。 9. **前端框架与库**:...

    精通javascript的源代码

    本资源“精通javascript的源代码”旨在帮助学习者通过实例深入理解JavaScript,从而更好地掌握这门语言。 在JavaScript的学习过程中,源代码起着至关重要的作用。源代码是程序的基础,它展示了如何使用语言语法、...

    精通JavaScript与jQuery

    JavaScript和jQuery是Web开发中...总之,精通JavaScript与jQuery不仅需要掌握它们的基本语法和核心概念,还需要通过实践不断深化理解和应用能力。这将为你的Web开发生涯打下坚实的基础,并帮助你应对各种网页交互挑战。

Global site tag (gtag.js) - Google Analytics