<精通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 ...
随机推荐
- Oracle Database 12c Data Redaction介绍
什么是Data Redaction Data Redaction是Oracle Database 12c的高级安全选项之中的一个新功能,Oracle中国在介绍这个功能的时候,翻译为“数据编纂”,在EM ...
- Android中通过ActionBar为标题栏添加搜索以及分享视窗
在Android3.0之后,Google对UI导航设计上进行了一系列的改革,其中有一个非常好用的新功能就是引入的ActionBar,他用于取代3.0之前的标题栏,并提供更为丰富的导航效果.Action ...
- NOIP模板整理计划
先占个坑 [update]noip结束了,弃了 一.图论 1.单源最短路 洛谷P3371 (1)spfa 已加SLF优化 #include <iostream> #include < ...
- BZOJ 3504: [Cqoi2014]危桥 [最大流]
3504: [Cqoi2014]危桥 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1407 Solved: 703[Submit][Status] ...
- spring boot1
spring boot 玩转spring boot--快速开始 开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv ...
- Windows下Nginx配置SSL实现Https访问(包含证书生成)
Vincent.李 Windows下Nginx配置SSL实现Https访问(包含证书生成) Windows下Nginx配置SSL实现Https访问(包含证书生成) 首先要说明为什么要实现https ...
- 疯狂的JSONP
何为跨域?何为JSONP?JSONP技术能实现什么?是否有必要使用JSONP技术? 跨域 就是由于JavaScript同源策略的限制,使得a.com域名下的js无法操作b.com或c.a.com域名下 ...
- ABP框架 - 介绍
文档目录 本节内容: 简介 一个快速示例 其它特性 启动模板 如何使用 简介 我们总是对不同的需求开发不同的应用.但至少在某些层面上,一次又一次地重复实现通用的和类似的功能.如:授权,验证,异常处理, ...
- ABP框架 - 验证数据传输对象
文档目录 本节内容: 简介 使用数据注解 自定义验证 禁用验证 正常化 简介 一个应用的输入应当先要验证,这个输入可能来自用户或另一个应用,在一个web应用里,验证通常实现两次:在客户端和在服务端,客 ...
- java中判断list是否为空的用法
1.如果想判断list是否为空,可以这么判断: if(null == list || list.size() ==0 ){ //为空的情况 }else{ //不为空的情况 } 2.list.isEmp ...