1.理解:prototype、getPrototypeOf和_proto_之间的不同
①C.prototype用于建立new C()创建的对象的原型。
②Object.getPrototypeOf(obj)是ES5中用来获取obj对象的原型对象的标准方法。
③obj._proto_是获取obj对象的原型对象的非标准方法。
类的本质上是一个构造函数与一个用于在该类实例间共享方法的原型对象的结合。
2.使用闭包存储私有数据
JavaScript的对象所有的属性名都是一个字符串,任意一段程序都可以简单地通过访问属性名来获取相应的对象属性。例如,for......in循环、ES5的Object.keys()和Object.getOwnPropertyNames()函数等特性都能轻易地获取到对象的所有属性名。
闭包是一种简朴的数据结构,它们将数据存储到封闭的变量中而不提供对这些变量的直接访问。获取闭包内部结构的唯一方式是该函数显示地提供获取它的途径。
闭包变量是私有的,只能通过局部的引用获取。
将局部变量作为私有数据从而通过方法实现信息隐蔽。
3.this变量的隐式绑定
每一个函数都有一个this变量的隐式绑定。该this变量的绑定值是在调用该函数时确定的。this变量的作用域总是由其最近的封闭函数所确定的。使用一个局部变量使得this绑定对于内部函数是可用的。
4.避免继承标准类
继承标准类的子类往往会由于一些特殊的内部属性(如[[class]])而被破坏。例如:
function Dir(path,entries){
this.path = path ;
for(var i = 0 , n = entries.length ; i < n ; i ++){
this[i] = entries[i] ;
}
}
Dir.prototype = Object.create(Array.prototype) ;
这种方式破坏了length属性的预期行为。length属性只在内部被标记为“真正的”数组的特殊对象起作用。ECMAScript标准规定它是一个不可见的内部属性,称为[[class]]。当我们扩展Array类时,子类的实例并不是通过new Array()或字面量[]语法创建的,所以Dir的实例的[[class]]属性值为“Object”。所以我们可以定义一个entries数组的实例属性:
function Dir(path , entries){
this.path = path ;
this.entriess = entries ;
}
在原型中重新定义Array的方法,我们可以将这些相应的方法委托给entries属性来完成。
Dir.prototype.forEach = function(f , thisArg){
if(typeof thisArg === “undefined”){
thisArg = this;
}
this.entries.forEach(f , thisArg) ;
}
ECMAScript标准库中的大多数构造函数都有类似的问题。某些属性或方法期望具有正确的[[class]]属性或其他特殊的内部属性,然而子类却无法提供。基于这个原因,最好避免继承以下的标准类:Array、Boolean、Date、Function、Number、RegExp或String。
Effective JavaScript :第四章的更多相关文章
-
[Effective Java]第四章 类和接口
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
-
Effective JavaScript :第二章
1.熟练掌握闭包 理解闭包要学会三个基本的事实: ①JavaScript允许你引用在当前函数以外定义的变量: 例如: function makeSandwich(){ var magicIngredi ...
-
Effective JavaScript :第一章
第一章 一.严格模式与非严格模式 1.在程序中启用严格模式的方式是在程序的最开始增加一个特定的字符串字面量: ‘use strict’ 同样可以在函数体的开始处加入这句指令以启用该函数的严格模式. f ...
-
javascript第四章--面向对象的程序设计
① 理解对象 ② 创建对象 ③ 继承
-
读《编写可维护的JavaScript》第四章总结
第四章 变量 函数和运算符 4.1 ① 变量声明 变量声明是通过var语句来完成的,并且所有的var语句都提前到包含这段逻辑的函数的顶部执行. function doSomething() { + v ...
-
Javascript权威指南——第二章词法结构,第三章类型、值和变量,第四章表达式和运算符,第五章语句
第二章 词法结构 一.HTML并不区分大小写(尽管XHTML区分大小写),而javascript区分大小写:在HTML中,这些标签和属性名可以使用大写也可以使用小写,而在javascript中必须小写 ...
-
[Effective JavaScript 笔记]第3章:使用函数--个人总结
前言 这一章把平时会用到,但不会深究的知识点,分开细化地讲解了.里面很多内容在高3等基础内容里,也有很多讲到.但由于本身书籍的篇幅较大,很容易忽视对应的小知识点.这章里的许多小提示都很有帮助,特别是在 ...
-
JavaScript高级程序设计:第十四章
第十四章 一.表单的基础知识 在HTML中,表单是由<form>元素来表示的,而在javascript中,表单对应的则是HTMLFormElement类型.HTMLFormElement继 ...
-
第四章	JavaScript操作DOM对象
第四章 JavaScript操作DOM对象 一.DOM操作 DOM是Document Object Model的缩写,即文档对象模型,是基于文档编程的一套API接口,1988年,W3C发布了第一级 ...
-
为什么我要放弃javaScript数据结构与算法(第四章)—— 队列
有两种结构类似于数组,但在添加和删除元素时更加可控,它们就是栈和队列. 第四章 队列 队列数据结构 队列是遵循FIFO(First In First Out,先进先出,也称为先来先服务)原则的一组有序 ...
随机推荐
-
python浅谈正则的常用方法
python浅谈正则的常用方法覆盖范围70%以上 上一次很多朋友写文字屏蔽说到要用正则表达,其实不是我不想用(我正则用得不是很多,看过我之前爬虫的都知道,我直接用BeautifulSoup的网页标签去 ...
-
原生JS实现瀑布流
浏览网页的时候经常会遇到瀑布流布局的网站.也许有些读者不了解瀑布流.瀑布流,又称瀑布流式布局.是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数 ...
-
2016年12月11日 星期日 --出埃及记 Exodus 21:6
2016年12月11日 星期日 --出埃及记 Exodus 21:6 then his master must take him before the judges. He shall take hi ...
-
简化工作流程 10款必备的HTML5开发工具
利用HTML5工具不仅可以帮助设计师和开发者创建更具吸引力的网站,还能增加网站的可用性和可访问性.本文收集了10款HTML5开发工具让你在网页中搭建特效.动画.视频.音频等诸多功能,为你节省更多开发时 ...
-
HDU 3998 Sequence (最长上升子序列+最大流)
参考链接:http://www.cnblogs.com/gentleh/archive/2013/03/30/2989958.html 题意:求一个序列的最长上升子序列,及其个数(注意:两个最长上升子 ...
-
[UVALive] 6492 Welcome Party(最小点覆盖)
6492 Welcome Party For many summers, the Agile Crystal Mining company ran an internship program for ...
-
定制Qt帮助系统
楼主 版权声明 该文章原创于Qter开源社区(www.qter.org),作者yafeilinux,转载请注明出处! 导语 一个完善的应用程序应该提供尽可能丰富的帮助信息.在Qt ...
-
设计模式--静态工厂设计模式在android中的使用
今天看到这篇文章:http://www.androiddesignpatterns.com/2012/05/using-newinstance-to-instantiate.html public c ...
-
Windows PowerShell 入門(9)-エラー編
対象読者 Windows PowerShellでコマンドレット操作ができる方 何らかのプログラミング経験があればなお良い 必要環境 Windows PowerShell エラーをリダイレクトする リダ ...
-
Fragment中启动一个新的Activity
最近遇到一个小问题,就是我在主界面中用的是Fragment,其中四个Fragment,然后打算在其中一个里边,写一个TextView(准确地说是Linearout)的单击事件,然后跳转到另外一个Act ...