<精通JavaScript>---阅读笔记01
下面是阅读精通JavaScript书做的相关笔记。
JS中的函数重载
函数重载必须依赖两件事情:判断传入参数数量的能力和判断传入参数类型的能力,在js中每个函数都带有一个仅在这个函数范围内作用的变量,称之为参数argument,它是一个包含所有传给函数参数的伪数组,所以并不是正的数组,但是我们不可以去修改它。其实这个就相当于一个池,将参数全部都保存在里面,之后在用的时候去取,只是这个池我们看不见。是语言自己去找。
JS中2种常见的类型检查
- :typeof()操作符
typeof n==”string”;
n为变量名,判断其是否为字符串类型。其实这个只适用于变量类型不是object和array的类型。
- :构造函数(constructor)
其实我们应该知道JS中每一个对象里面都有一个默认的构造函数,我们可以利用这个构造函数来进行判断;
var num,str;
if (num.constructor == String) {
num = parseInt(num);
}
if (str.constructor == Array) {
str=str.join(',');
}
闭包
闭包意味着内层的函数可以引用存在于包围它的函数内的变量,即使外层函数执行已经终止,
其实这个可以这样理解:就是说函数里面的函数对象调用了外面的变量,如果里面的对象不释放,那么外面的变量将会一直存在,保持为一种僵死的状态,直至里面的对象不在调用即可死亡。这样的话,外面的变量占用的内存空间将会一直保存着。
上下文对象
这里的上下文对象,是指我们代码的总负责人是谁,通常我们使用this来表示,这个变量永远指向当前代码所在的对象中。全局对象是window对象属性。
这里的上下文对象可以进行切换为windows对象。
function changeColor(color) {
this.style.color = color;
}
changeColor("white");
//这样会失败,因为window对象没有style属性;
var main=document.getElementById('main');
changeColor.call(main,"black");
function setBodyColor(){
changeColor.apply(document.body,arguments);
}
setBodyColor("black");
JS中的对象
JS中没有类的概念,对于其余的面向对象语言中大多就是对于实例化某个具体类的实例,但是在JS中不用,JS中对象本身可以用来创建新对象,而对象也可以继承自其它对象,这是原型化继承;其实在JS中对象就是我们的函数,任何函数都可以被实例化为一个对象。
function User(name) {
this.name = name;
}
//1:当作对象使用
var me = new User("My Name");
alert(me.name);
//当作函数使用,此时的name是为全局的window对象;
User("A Hui");
alert(window.name);
- 公共方法
公共方法在对象的上下文中是用户最终接触到的,要实现这种在对象的每个实例中都可以使用的公共方法,必须使用一个叫prototype(原型)的属性,这个属性包含一个对象,这个对象可以作为所有新副本的基引用。本质上说,所有对象原型的属性都能在对象的每个实例中找到。这就是js中的继承。
//这里的this指的是那个对象,谁调用函数,就是谁。刚开始是window对象
function User(name,age){
this.name=name;
this.age=age;
}
User.prototype.getName=function(){
return this.name;
};
User.prototype.getAge=function(){
return this.age;
};
var user=new User("andyahui",);
alert(user.getName()); //这里是函数就需要使用()
alert(user.getAge());
- 私有方法
私有方法和私有变量只容许其它的私有方法,变量和特权方法访问。
下面这个代码就是一个私有方法,但是外面访问不了。报错。
function Classroom(students, teacher) {
function disp() {
alert(this.name.join(","));
}
this.students = students;
this.teacher = teacher;
disp();
}
var classq = new Classroom(["John", "Bob"], "MR.Smith");
classq.disp();

- 特权方法
这个是Douglas Crockford采用的一个名词,用来指代那些查看并处理(对象)私有变量的同时容许用户以公共方法的方式访问的方法;
function User(name, age) {
var year = (new Date()).getFullYear() - age;
this.getYearBorn = function() {
return year;
};
}
var user = new User("ahui", );
alert(user.getYearBorn()); //
alert(user.year); //undefined
特权方法是动态生成的,因为只有调用方法的时候才会去生成必要的数据。不是在代码第一次编译的时候就生成的。虽然这个技巧要比继承prototype上面绑定一个简单的方法开销更大,但功能也更强大,更灵活。(也就是year变量的作用域是函数里面,外面的对象访问不到。)
动态生成代码的能力不可小视,可以根据运行时变量来生成代码,这也是其它语言里的宏。
我不会告诉别人我是一个程序员,如果一定要取一个称号的话:我就是”艺术的缔造者”。
<精通JavaScript>---阅读笔记01的更多相关文章
- Java并发编程阅读笔记-Java监视器模式示例
1.前言 书中在解释Java监视器模式的时候使用了一个车辆追踪器例子,根据不同的使用场景给出了不同的实现和优化. 2.监视器模式示例 实现一个调度车辆的"车辆追踪器",每台车使用一 ...
- uml大战需求分析阅读笔记01
<<UML大战需求分析>>阅读笔记(1) 刚读了uml大战需求分析的第一二章,读了这些内容之后,令我深有感触.以前学习uml这门课的时候,并没有好好学,那时我认为这门课并没有什 ...
- 《java与模式》阅读笔记01
这次我读了前两章的内容,就如书名所言,这本书主要将的就是java中的模式,在书中的序言就把所有的模式都介绍了一下,主要有, 1.创建模式:简单工厂模式,工厂方法模式,抽象工厂模式,建造模式 2.行为模 ...
- Spring源码阅读笔记01:源码阅读环境准备
1. 写在前面 对于做Java开发的同学来说,Spring就像是一条绕不过去的路,但是大多数也只是停留在对Spring的简单使用层面上,对于其背后的原理所知不多也不愿深究,关于这个问题,我在平时的生活 ...
- Java与模式读书笔记
>设计目标:可扩展性,灵活性,可插入性. >设计原则 ● Open Closed Principle 开闭原则 对扩展开放,对修改关闭. 对面向对象的语言来说,不可以更改的是系统的抽象层, ...
- java web开发阅读笔记:第一章
学习该书前所用推荐书籍<名师讲坛—java开发实战经典> 一web开发前奏 1.1网页发展 首先搞懂. 1.HTTP:超级文本传输协议,是一种通讯协议. 通过这个网络协议WW浏览器与WWW ...
- 深入理解Java虚拟机一 阅读笔记
xl_echo编辑整理.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!! --- > 以下内容摘抄自 ...
- 深入理解Java虚拟机二 阅读笔记
xl_echo编辑整理.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!! --- > 以下内容摘抄自 ...
- UML大战需求分析--阅读笔记01
本次阅读的书籍是<UML大战需求分析>,看了前两章的内容:1 大话UML,2绞尽脑汁的需求分析.这两章内容关联不大,分开描述. 第一章:大话UML 本章主要概述UML是什么,有什么内容.U ...
随机推荐
- Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验
Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...
- Adaboost提升算法从原理到实践
1.基本思想: 综合某些专家的判断,往往要比一个专家单独的判断要好.在"强可学习"和"弱科学习"的概念上来说就是我们通过对多个弱可学习的算法进行"组合 ...
- 页面布局class常见命名规范
头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左右中:left rig ...
- Lucene4.4.0 开发之排序
排序是对于全文检索来言是一个必不可少的功能,在实际运用中,排序功能能在某些时候给我们带来很大的方便,比如在淘宝,京东等一些电商网站我们可能通过排序来快速找到价格最便宜的商品,或者通过排序来找到评论数最 ...
- (转)从0开始搭建SQL Server AlwaysOn 第一篇(配置域控+域用户DCADMIN)
原文地址: http://www.cnblogs.com/lyhabc/p/4678330.html 实验环境: 准备工作 软件准备 (1) SQL Server 2012 (2) Windows S ...
- VPN连接常见错误汇总
提示远程服务器没有响应. 这种情况有两种情况,一种是远程服务器出现故障.另一种是自己的电脑出现问题,具体原因我还没有找到,但是可以肯定的是注册表除了问题,一个终极的解决办法就是把注册表替换了.先将HK ...
- ubuntu进行子域名爆破
好记性不如烂笔头,此处记录一下,ubuntu进行子域名的爆破. 先记录一个在线的子域名爆破网址,无意中发现,很不错的网址,界面很干净,作者也很用心,很感谢. https://phpinfo.me/do ...
- Netty构建分布式消息队列(AvatarMQ)设计指南之架构篇
目前业界流行的分布式消息队列系统(或者可以叫做消息中间件)种类繁多,比如,基于Erlang的RabbitMQ.基于Java的ActiveMQ/Apache Kafka.基于C/C++的ZeroMQ等等 ...
- 使用ENode框架前您需要了解的东西(初稿)
选择ENode意味着什么可能很多人还不太清楚.我简单整理了一下: 意味着你选择了:你需要做DDD领域建模.选择了事件驱动的架构.选择了CQRS架构.选择了最终一致性.选择了事件溯源.选择了分布式.这些 ...
- WPF - 属性系统 (3 of 4)
依赖项属性元数据 在前面的章节中,我们已经介绍了WPF依赖项属性元数据中的两个组成:CoerceValueCallback回调以及PropertyChangedCallback.而在本节中,我们将对其 ...