<精通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 ...
随机推荐
- [C#] 走进 LINQ 的世界
走进 LINQ 的世界 序 在此之前曾发表过三篇关于 LINQ 的随笔: 进阶:<LINQ 标准查询操作概述>(强烈推荐) 技巧:<Linq To Objects - 如何操作字符串 ...
- Kooboo CMS技术文档之一:Kooboo CMS技术背景
语言平台 依赖注入方案 存储模型 1. 语言平台 Kooboo CMS基于.NET Framework 4.x,.NET Framework 4.x的一些技术特性成为站点开发人员使用Kooboo CM ...
- JS继承之寄生类继承
原型式继承 其原理就是借助原型,可以基于已有的对象创建新对象.节省了创建自定义类型这一步(虽然觉得这样没什么意义). 模型 function object(o){ function W(){ } W. ...
- jquery屏幕滚动计算事件总结
获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 : $(window).width(); 获取页面的文档高度: $(docume ...
- C# BackgroundWorker 详解
在C#程序中,经常会有一些耗时较长的CPU密集型运算,如果直接在 UI 线程执行这样的运算就会出现UI不响应的问题.解决这类问题的主要途径是使用多线程,启动一个后台线程,把运算操作放在这个后台线程中完 ...
- 【夯实PHP基础】PHP数组,字符串,对象等基础面面观
本文地址 分享提纲 1.数组篇 2.字符创篇 3.函数篇 4.面向对象篇 5.其他篇 /*************************** 一.数组篇 Begin***************** ...
- 中国CIO最关心的八大问题(下)
中国CIO最关心的八大问题(下) 从调研数据还可以看出,在企业级IT建设与投资上,CIO们并非是一群狂热的技术信徒,他们更多的是从企业发展阶段.信息化程度.技术成熟度.ROI等方面进行综合评估. 五. ...
- php+websocket搭建简易聊天室实践
1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短 ...
- Android快乐贪吃蛇游戏实战项目开发教程-06虚拟方向键(五)绘制方向键箭头
本系列教程概述与目录:http://www.cnblogs.com/chengyujia/p/5787111.html本系列教程项目源码GitHub地址:https://github.com/jack ...
- tg2015 信息传递 (洛谷p2661)
题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...