这几天发现了一本好书,又薄又精辟,《JavaScript语言精粹》
看了对象、函数这两节,发现书如其名,确实是精粹。

函数的调用

函数调用的方式有四种:
- 方法调用模式
- 函数调用模式
- 构造器调用模式
- apply调用模式

方法调用模式

这个方法是经常会见到的一种模式,方法作为对象的一种属性,通过obj.functionName()这种调用方式调用,如:

var myObject = {value: 0;increment: function(inc) {this.value += typeof inc === 'number' ? inc : 1; //默认增加为1}
}
myObject.increment(); //方法调用模式
console.log(myObject.value); //1myObject.increment(2);
console.log(myObject.value); //3

方法调用的好处就是,this绑定的是调用该方法的对象,因此它可以访问myObj.value

函数调用模式

当一个函数并非一个对象的属性时,那么它被当作一个函数来调用:

var sum=add(3,4)

当采用这种方式调用时,this被绑定到全局对象。

例如:

var a = 'gloabal:';function test() {var a = 'add:';return (function() {return this.a + 1;})()
}
var sum = test();
console.log(sum);//global:1

按道理来讲,test里面的匿名函数应该访问test的a,但是this却指向了global;

如果声明“use strict” ,会报异常:Cannot read property ‘a’ of undefined
作者说这是JavaScript语言设计上的错误。倘若语言设计正确,当内部函数被调用时,this应该仍然绑定到外部函数的this变量。

解决方法:

function add(a, b) {return a + b;
}
var myObject = {value: 1,getValue: function() {return this.value;}
}
myObject.double = function() {var that = this;var helper = function() {that.value = add(that.value, that.value);}helper(); //以函数方式调用helpher
}
myObject.double();
console.log(myObject.getValue()); //2

构造器调用模式

javascript是一门基于原型继承的语言。这意味着对象可以直接从其他对象继承属性。
书中的例子:

var Quo = function(string) {this.status = string;
}
Quo.prototype.get_status = function(first_argument) {return this.status;
};var myQuo = new Quo('Confused');
console.log(myQuo.get_status());

说明:
1、这里声明了一个Quo类
2、Quo具有属性status,和原型方法get_status
3、因为get_status是Quo的原型属性,因此this指向调用Quo的对象

这种结合new前缀调用的函数,就被称作是构造器函数了。
如果调用函数没有在前面加上new,会发生非常糟糕的事情,既没有编译时的警告,也没有运行时警告,所以大写约定非常重要。

apply调用模式

javascrip是一门函数式的面向对象编程语言,所以函数可以拥有方法。
apply方法让我们可以构建一个参数并用其去调用函数,它也允许我们选择this的值,apply方法接收两个参数。第一个是将被绑定给this的值,第二个是一个参数数组

var array = [3, 4];
var sum = add.apply(null, array);
/*延续demo3,利用apply,不需要new关键字,把对象statusObject通过apply传递*/
var statusObject = {status: 'A-OK'
};
var Quo = function(string) {this.status = string;
}
Quo.prototype.get_status = function(first_argument) {return this.status;
};
var status = Quo.prototype.get_status.apply(statusObject);
console.log(status);

《javascript语言精粹》读书笔记——函数相关推荐

  1. effective python怎么样_【Python】《Effective Python》 读书笔记 (一)

    # -*- coding: utf-8 -*- from datetime import datetime from time import sleep from urllib.parse impor ...

  2. 《Effective C++》读书笔记(第一部分)

    有人说C++程序员可以分为两类,读过Effective C++的和没读过的.世界顶级C++大师Scott Meyers 成名之作的第三版的确当得起这样的评价. 本书并没有你告诉什么是C++语言,怎样使 ...

  3. 《Effective C++》读书笔记(一)

    <Effective C++>读书笔记 条款01:视C++为一个语言联邦 C++高效编程守则视状况而变化,取决于你使用C++的哪一部分(C, Obejct-Oriented C++, Te ...

  4. 【绝版C++书籍】《Effective STL》读书笔记

    <Effective STL>读书笔记 写在前面 0<Effective STL>中可能过时的内容 1 容器 第1条:慎重选择容器类型. 第2条:不要试图编写独立于容器类型的代 ...

  5. 计算机毕业设计django基于python的读书笔记共享平台

    项目介绍  本论文主要论述了如何使用PYTHON语言开发一个读书笔记共享平台 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发.在引言中,作者将论述读书笔 ...

  6. 计算机毕业设计django基于python的读书笔记共享平台(源码+系统+mysql数据库+Lw文档)

    项目介绍 本论文主要论述了如何使用PYTHON语言开发一个读书笔记共享平台 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发.在引言中,作者将论述读书笔记 ...

  7. 《流畅的Python第二版》读书笔记——函数作为一等对象

    引言 这是<流畅的Python第二版>抢先版的读书笔记.Python版本暂时用的是python3.10.为了使开发更简单.快捷,本文使用了JupyterLab. 函数是Python的一等( ...

  8. 《流畅的Python第二版》读书笔记——函数中的类型注解

    引言 这是<流畅的Python第二版>抢先版的读书笔记.Python版本暂时用的是python3.10.为了使开发更简单.快捷,本文使用了JupyterLab. 本章关注于Python在函 ...

  9. Effective C++ XMind读书笔记

    前段时间看了effective C++第三版,用XMind记了些读书笔记. part1 习惯C++ part2

  10. 《零基础入门学习Python》读书笔记

    写在前面 嘻,计划每个月读一本新书,这个月一直在忙考试,都没怎么学编程方面的知识,这是去年假期看的一本书,当时没有做笔记,现在都忘得差不多啦!!,嗯,在这个月的最后一天,写了这篇博客,笔记会陆续的整理 ...

最新文章

  1. 深入理解计算机系统——系统级I/O
  2. Java nio Socket非阻塞模式
  3. Nacos配置管理-配置热更新
  4. 17行代码AC——习题5-3 卡片游戏(Throwing cards away I, UVa 10935,约瑟夫环)_解题报告
  5. ***清除工具的进化
  6. 哈工大理论力学第八版电子版_校史上的这些天(37)| 和你一起在“岁月”中读懂哈工大...
  7. HDOJ1028-Ignatius and the Princess III(整数划分)
  8. 【疾病分类】基于matlab SVM农作物叶子虫害识别与分类【含Matlab源码 624期】
  9. 笨办法学R编程(5)
  10. BP神经网络时间序列预测-附代码
  11. 拯救者Y7000拆机清灰方法及加装机械硬盘
  12. Java方法重载中返回值的问题
  13. 计算冲突域和广播域的方法
  14. 中国最大的“隐形首富”,掌舵中国最大汽车集团,身价高达760亿
  15. swiper循环轮播加文字动画
  16. 有没有测试ipad的软件,4个用于测试iPhone iPad应用程序的iOS模拟器 | MOS86
  17. 【JavaSE基础】00-计算机基础及环境搭建
  18. 电脑打不开计算机设备管理,如何解决 设备管理器打不开的问题 设备管理器打不开怎么解决...
  19. 2018-11-21 枷锁
  20. 【逻辑】四人过桥问题

热门文章

  1. 京东方校园招聘页面重构
  2. C++ 类型转换(static_cast、dynamic_cast、reinterpret_cast、const_cast)
  3. 写给想互联网创业, 但不懂技术的人
  4. 【隐写工具】【试一试?】jphide seek(JPHS) 使用方法,检测提示,附下载地址
  5. matlab magnify程序,magnify matlab源程序
  6. 关于人体血液循环的猜想
  7. linux的root用户默认密码,Linux下root初始密码设置方法
  8. 数据恢复软件(列表)
  9. 计算机图形学(四)几何变换_3_矩阵逆变换
  10. 2020年11月编程排行出炉,Java市场占有率仍第一