`
wfsheep
  • 浏览: 16893 次
文章分类
社区版块
存档分类
最新评论

《javascript语言精粹》读书笔记二

阅读更多

本节是对语言精粹第四章的一些总结和精华梳理,因为这一章主要是说明函数这个js中的一等公民的,所以专门抽出一节来希望把这个部分说透。

第四章

函数对象,函数对象也是一个对象之中,函数对象在创建中会产生一个prototype属性。

函数字面量,通过函数字面量创建的函数对象包含一个连到外部上下文的连接,这被称为闭包。这是js强大表现力的来源。

函数调用方式,函数一共有四种调用方式,这四种调用方式在初始化this这个关键参数上存在差异:
1. 方法调用模式
2. 函数调用模式
3. 构造器调用模式
4. apply调用模式

对于1、方法调用模式,简单说this对象指向调用的者,ex:

js code:
    var x = {
        value: 0,
        call: function() {
            console.log(this.value);
        }
    }

    x.call();// 0,此时this指向x

对于2、函数调用模式对于函数调用模式上,this将会被绑定到全局对象上,书中说这是一处设计失误,不过我觉得可以这样理解,当函数调用模式中,可以理解为调用函数为window.x,所以在此模式下指向window,ex:

js code:
    function x() {
        console.log(this);
    }

    x();//window

对于3、构造器模式,在此模式中,this将指向被new函数实例化后的函数,ex:

js code:
    var X = function() {
        this.zak = 'wu';
    }

    X.prototype.getName = function() {
        console.log(this.zak);
    }
    // 实例化
    var x = new X();
    x.getName();// 'wu';

对于4、apply调用模式,在此模式中,this将是调用时传入的绑定对象,也就是apply(call)传入的第一参数,ex:

js code:
    var X = function() {
        this.zak = 'wu-X';
    }
    var y = {
        zak:  'me-Y'
    }

    X.prototype.getName = function() {
        console.log(this.zak);
    }
    // 实例化
    var x = new X();
    x.getName.apply(y);// 'me-Y';

函数参数,函数的参数当实参数量不等于形参时,将不会产生运行时错误。当实参数量多时,多的参数将会被赋值为undefined,当实参数量少时,未传入参数将会被赋值为undefined。当函数创建时,将会传入arguments作为默认属性,arguments是一个类数组对象,他有length,但是没有数组相应的一系列方法。可以通过[].slice.call(arguments)将其转换为真正的数组。

函数返回,当函数执行到return语句时将会返回,当没有return语句时将返回undefined,这里有一个特例,如果在函数调用时在前面加上了new前缀,且其返回不是一个对象时,将会返回this。

当然,本章的内容很多,比如递归,记忆,模块等等各种编码方案,或者说是最佳实践,写的都很棒,值得细读。

更多内容请查看zakwu的小站

分享到:
评论

相关推荐

    JavaScript 精粹读书笔记(1,2)

    在《JavaScript 精粹》一书中,作者深入探讨了JavaScript的特性和最佳实践,旨在帮助开发者区分和利用其精华部分,同时避免那些可能会引起问题的鸡肋特性。 首先,JavaScript的某些特性带来了麻烦,因为其规范的不...

    JavaScript 语言精粹学习笔记第1/2页

    JavaScript是一种广泛使用的高级、解释型编程语言,它以其函数式编程的特性、弱类型系统、动态对象和富有表现力的对象字面量而闻名。然而,它同样存在着基于全局变量的编程模型这一缺点。JavaScript的函数基于词法...

    ASP数据库开发实例精粹

    《ASP数据库开发实例精粹》是一本专注于使用ASP(Active Server Pages)进行数据库开发的实践指南。这本书的主要目的是通过丰富的实例来帮助读者深入理解和掌握如何利用ASP与各种数据库进行交互,实现动态网站功能。...

    javascript 精粹笔记

    标题为“javascript 精粹笔记”的这份文档显然是一份针对JavaScript语言的学习和应用技巧的集合。JavaScript是一种广泛应用于Web前端开发的脚本语言,随着互联网技术的发展,JavaScript的应用越来越广泛,不仅限于...

    angularJS笔记

    javascript:闭包 作用域 原型 Javascript权威指南 Javascript高级程序员设计 Javascript语言精粹 Javascript模式

    前端开发书籍推荐与学习路线.docx

    * 推荐书籍:JavaScript 高级程序设计、JavaScript 权威指南、JavaScript 语言精粹 * 学习方法:边实战边记笔记,不要光看,要有方法的快速阅读 三、JavaScript 进阶 * 推荐书籍:《你不知道的 JavaScript》 * ...

    计算机书籍读书笔记.docx

    ### 计算机书籍读书笔记知识点汇总 #### 第一篇:CSS精粹之布局技巧 **1. 错误检测的重要性** - 在遇到CSS布局问题时,及时进行代码检查可以帮助开发者快速定位并解决问题。 - **W3C提供的工具**:W3C提供XHTML...

    《COM原理与应用》全书笔记

    ### COM原理与应用全书笔记精粹 #### 一、COM基本概念与接口设计 COM(Component Object Model)是微软提出的一种组件对象模型,旨在实现跨语言、跨平台的组件互操作性。在C++中,COM通过接口(Interface)来实现...

Global site tag (gtag.js) - Google Analytics