读书笔记:javascript高级程序设计
> 变量、作用域和内存问题
js为弱类型的语言 变量的值和数据类型可以在脚本的生命周期内改变。
5种基本类型:string, number, undefined, null, boolean,基本数据类型是按值访问的。
引用类型是保存在内存中的对象,js不能直接操作对象的内存空间。引用类型是按引用访问的。
动态的属性
对象的属性可以随时添加和删除 delete运算符
不能给基本类型添加属性 如:
var name = "myname";
name.age = 18;
console.log(name.age); //undefined
基本类型和引用类型的赋值,基本类型赋的是值,引用类型赋的是引用 ~~~引用类型变量中存储的是对象的指针 堆内存 栈内存
var n = 1; var m = n; n = 100; console.log(m,n);
var arr1 =[1,2]; var arr2 = arr1; arr1.push(3); console.log(arr1,arr2);
参数传递
ES中所有函数的参数传递都是按值传递的(基本类型变量保存的是真实的值,引用类型变量保存的是指针),实参会被复制一份 赋值给形参。
arguments对象默认自动创建,除非在函数内声明了同名的arguments局部变量
> in搜索原型链,如果继承层次深 性能会不太好, hasOwnProperty只搜索本地属性
in
for in
遍历出可枚举的属性
自定义的属性默认都可枚举 o.a='33'
> Object.prototype对象提供的方法
hasOwnProperty()
propertyIsEnumerable()
isPrototypeOf
toString()
toLocaleString()
valueOf()
~~~instanceof 运算符 和 isPrototypeOf 检测原型对象和实例的关系
~~~原型链中查找属性,作用域链中查找变量
~~~执行上下文EC (变量对象 活动对象, 作用域链, thisValue )
~~~实例化之后,重写构造函数的原型对象,会导致之前的实例和新原型之间无任何关系
如
function Foo(){}
Foo.prototype.hi = 'night';
var f = new Foo();
Foo.prototype={hi:'hello'};
var f2 = new Foo()
console.log(f.hi, f2.hi);
> 创建自定义类的方式
1. 工厂模式 ~~~函数内部创建对象,添加属性和方法,然后返回该对象 缺点无法确定实例类型 占内存
function foo(n){
var o = new Object();
o.a = 100
o.name = n
o.say = function(){ alert(this.a) }
return o;
}
var o1 = foo('a'); var o2 = foo('b');
2. 构造函数模式 ~~~ new一个对象 所有属性和方法都在构造函数内指定 缺点 占内存
function Foo(n){
this.a = 100;
this.n = n;
this.say = function(){ alert(this.n);}
}
var o1 = new Foo('1'); o2 = new Foo('b');
3. 原型模式 ~~~ 空构造函数 所有属性和方法都在原型中指定 缺点:无法传参数 实例共享引用类型的属性,对其修改会影响所有其他实例
function Foo(n){}
Foo.prototype = { a:100, n:'hi', say:function(){ alert(this.a)}, arr:[1,2,3]}
var o1=new Foo(); var o2 = new Foo(); o1.arr.push(4);
4.组合模式 ~~~ 在构造函数中添加实例属性,在原型中添加共有属性
function Foo(n){
this.a = 100;
this.n = n;
}
Foo.prototype= {hi:function(){alert(this.n);}, constructor: Foo };
5. 动态原型模式 ~~~无需在构造函数和原型中分别定义 才构成一个类,直接在构造函数中初始化原型对象 ** 推荐 组合方式或动态原型方式创建类 **
function Foo(n){
this.a = 100;
this.n = n;
if(!Foo.prototype.hi){ //假设hi是 原型对象中肯定会有的属性,从而判断原型是否已经初始化, 只在第一次实例化时会执行
Foo.prototype.hi = function(){ alert(this.n);};
Foo.prototype.go = function(){ console.log( 'go school');};
}
}
> 实现私有数据成员
function Foo(n,a){ //n a 为私有数据成员 ,只有o可以访问
var o = new Object();
o.say = function(){
return a;
}
return o
}
> 接口继承和实现继承
读书笔记:javascript高级程序设计相关推荐
- 读书笔记-JavaScript高级程序设计(1)
1.组合继承 (JavaScript 中最常用的继承模式 ) (position: page168) (书中定义了两个变量名 SuperType SubType 乍一看 感觉不太能区分,我将改为 ...
- 读书笔记 - js高级程序设计 - 第四章 变量 作用域 和 内存问题
5种基本数据类型 可以直接对值操作 判断引用类型 var result = instanceof Array 执行环境 每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对 ...
- 《Javascript高级程序设计》读书笔记之对象创建
<javascript高级程序设计>读过有两遍了,有些重要内容总是会忘记,写一下读书笔记备忘 创建对象 工厂模式 工厂模式优点:有了封装的概念,解决了创建多个相似对象的问题 缺点:没有解决 ...
- 《JavaScript高级程序设计》读书笔记 -12.1 window对象
<JavaScript高级程序设计>读书笔记 -12.1 window对象 12.1 window对象 12.1.1 Global作用域 12.1.2 窗口关系[不是很懂] 12.1.3 ...
- 《JavaScript高级程序设计》读书笔记 【8章~】【持更】
文章目录 上一篇:<JavaScript高级程序设计>读书笔记 [1~7章] 8. BOM 8.1. window对象 窗口位置 窗口大小 打开窗口 间歇调用与超时调用 系统对话框 8.2 ...
- 读书笔记(06) - 语法基础 - JavaScript高级程序设计
写在开头 本篇是小红书笔记的第六篇,也许你会奇怪第六篇笔记才写语法基础,笔者是不是穿越了. 答案当然是没有,笔者在此分享自己的阅读心得,不少人翻书都是从头开始,结果永远就只在前几章. 对此,笔者换了随 ...
- JavaScript高级程序设计(读书笔记)(六)
本笔记汇总了作者认为"JavaScript高级程序设计"这本书的前七章知识重点,仅供参考. 第六章 面向对象的程序设计 面向对象(Object-Oriented, OO)的语言有一 ...
- JavaScript高级程序设计(读书笔记)(一)
本笔记汇总了作者认为"JavaScript高级程序设计"这本书的前七章知识重点,仅供参考. 第一章 JavaScript简介 JavaScript发展简史: 1995年,JavaS ...
- 《JavaScript 高级程序设计》精读笔记
本系列读书笔记是我通过学习<Javascript 高级程序设计>第3版时结合自己的理解.概括.精炼然后加以一定的拓展,总结而来的,非常适合具有一定基础,同时又想把 JS 基础学更好的童鞋, ...
- 《javascript高级程序设计》笔记:内存与执行环境
上一篇:<javascript高级程序设计>笔记:继承 近几篇博客都会围绕着图中的知识点展开 由于javascript是一门具有自动垃圾收集机制的编程语言,开发者不必担心内存的分配和回收的 ...
最新文章
- chrome扩展推荐:有我,你又省了一个ssh客户端 --- Secure Shell
- java代码程序_Java程序代码
- 经典问题:向setTimeout传递函数参数
- [iOS常见问题] 关于使用QQ做第三方登录的问题!
- 工作之后,顶会还重要嘛?
- pythonre正则表达式1012pythonre正则表达式_python re模块 正则表达式
- 电脑屏保在哪里设置_超火的时钟屏保,有点个性!
- java get https_JAVA – 使用SSL证书和HTTPS的简单GET请求
- C++动态内存会被自动释放吗?
- R语言——基础知识呕心沥血大汇总
- ubuntu安装windows中的常用字体
- HDU 6184 Counting Stars 经典三元环计数
- 【本周最新】qlv转mp4格式转换器 工具 软件
- oracle11g 网页账号,oracle11g 创建用户并受权
- 用vim解压各种格式
- 计算机考试电子邮件怎么回复,计算机基础知识电子邮件使用技巧集锦(二)
- 一文搞懂什么是神经网络Neural Network【详细介绍】
- 科学的研究方法——笛卡尔
- 信号链(Signal Chain)芯片
- win10解决0xc000007b错误办法
热门文章
- C#WinForm程序异常退出的捕获、继续执行与自动重启
- .NetCore实践篇:成功解决分布式监控ZipKin聚合依赖问题(三)
- 如何在.NET控制台应用程序中获取应用程序的路径?
- HTML文本框写在同一行,标签和文本框在同一行使用css
- 卡尔曼滤波,高斯函数
- 超级计算机用于挖矿,全球至少500台超级计算机都被用来比特币挖矿
- matlab pdm转pcm_STM32F407 PDM转PCM问题
- 查看被Linux干掉的进程,Linux 查看进程被杀死的详情
- winform keydown 等待按下另外一个键_真是没想到,手机电源键还有4个隐藏技巧,今天算是学到了...
- JavaScript获取验证码,60秒倒计时方法