序:好书是需要不断品读的!再读语言精粹,顺便做点笔记。

1.NaN是一个数值,它表示一个不能产生正常结果的运算结果。NaN不等于任何值,包括它自己。检测是否为NaN:  isNaN(number)。

2.JavaScript的简单类型包括数字、字符串、布尔值、null值和undefined值。其他所有的值都是对象。

3.每个对象都连接到一个原型对象,并且它可以从中继承属性。所以通过对象字面量创建的对象都连接到Object.prototype这个Javascript中标准的对象。

当你创建一个新对象时,你可以选择某个对象作为它的原型。Javascript提供的实现机制杂乱而复杂,但其实它可以被明显的简化。例:

Object.beget = function(o){

         var F = function(){};

         F.prototype = o ;

         return new F();

}

4.hasOwnProperty用来检查是否是对象的属性:  flight.hasOwnProperty('number')。

5.delete运算符可以用来删除对象的属性。如果对象包含该属性,那么该属性就会被移除。它不会触及原型链中的任何对象。

删除对象的属性可能会让来自原型链中的属性透现出来:

children.name  //'Moe'
//删除children的name属性,从而暴露出原型的name属性
delete children.name
children.name //'Curly'

6.this解析:

this的值取决于调用的模式。在JavaScript中一共有4中调用模式:方法调用模式、函数调用模式、构造器调用模式和apply调用模式。

方法调用模式:

当一个函数被保存为对象的一个属性时,我们称它为一个方法。当一个方法被调用时,this被绑定到该对象。如果调用表达式包含一个提取属性的动作,那么它就被当做一个方法来调用。

//创建myObject对象。
//increment方法接受一个可选的参数。如果参数不是数字,那么默认使用数字1 var myObject = {
value:0,
increment: function(inc){
this.value +=typeof inc === 'number'?inc:1;
}
} myObject.increment();
console.log(myObject.value); // myObject.increment(2);
console.log(myObject.value); //

方法可以使用this访问自己所属的对象,所以它能从对象中取值或对对象进行修改。this到对象的绑定发生在调用的时候。这个"超级"延迟绑定使得函数可以对this高度复用。通过this可取得他们所属对象的上下文的方法称为公共方法。

函数调用模式:

当一个函数并非一个对象的属性时,那么它就是被当做一个函数来调用的

以此模式调用函数时,this被绑定到全局对象。

//给myObject增加一个double方法。
myObject.double = function(){
var that = this;
var helper = function(){
//因为helper不是属性,所以如果这里用this代表的全局的
that.value = add(that.value,that.value);
}
helper(); //以函数形式调用helper
}

构造器调用模式:

如果在一个函数前面带上new来调用,那么背地里将会创建一个连接到该函数的prototype成员的新对象,同时this会被绑定到那个新对象上。

var Quo =  function(string){
this.status = string;
}
//给Quo的所有实例提供一个名为get_status的公共方法
Quo.prototype.get_status = function(){
return this.status;
}
//构造一个Quo实例
var myQuo = new Quo("confused");
console.log(myQuo.get_status()); // 显示confused

Apply调用模式:

apply方法让我们构建一个参数数组传递给调用函数。它也允许我们选择this的值。apply方法接收两个参数,第一个是要绑定给this的值,第二个就是一个参数数组。

//构造一个包含两个数字的数组,并将它们相加。
var array = [3,4];
var sum = add.apply(null,array);
//构造一个包含status成员的对象。
var statusObject = {
status:'A-OK'
}; //statusObject 并没有继承自Quo.prototype,但我们可以在statusObject上调用get_status方法,尽管statusObject并没有一个名为get_status的方法。
var status = Quo.prototype.get_status.apply(statusObject);

7.Arguments

当函数被调用时,会得到一个免费配送的参数,那就是arguments数组。函数可以通过此参数访问所有它被调用时传递给它的参数列表,包括哪些没有被分配给函数声明时定义的形式参数的多余参数。

因为语言的一个设计错误,arguments并不是一个真正的数组。它只是一个类似数组的对象。arguments拥有一个length属性,但它没有任何数组的方法。

比较忙,暂时先写那么多,后补

JavaScript精粹的更多相关文章

  1. JavaScript 精粹

    数据类型 JavaScript 是 弱类型 语言,但并不是没有类型,JavaScript可以识别下面 7 种不同类型的值: 基本数据类型 Boolean Number String null unde ...

  2. JS获得css样式即获得元素的计算样式(《Javascript精粹修订版》书摘)

    为HTML文档中的元素指定样式可以有3种方法:使用内嵌样式.在页面的head中对Style进行声明以及外部 CSS 文件.元素的视觉效果往往是由上述3种方式的结合或者其中某一种方式来确定的,但是内嵌样 ...

  3. JavaScript代码检查工具 — JSHint

    静态代码检查是开发工作中不可缺少的一环,毕竟对于程序化的工作人的眼睛是不可靠的,更何况是自己的眼睛看自己的代码.即使最后的运行结果通过,但可能存在一些未定义的变量.定义了但最后没用过的变量.分号有没有 ...

  4. 深入浅出JavaScript函数 v 0.5

    本文的观点是建立在<JavaScript权威指南 6th Ed> <JavaScript高级编程 3th Ed> <JavaScript精粹 2th Ed>之上, ...

  5. JavaScript基本概念(一) v0.5

    摘要:先简单介绍ECMAScript的语法(如果有其他类C的经验,这个很好理解),接着介绍了ECMAScript的数据类型:Number.Boolean.String.Undefined和Null类型 ...

  6. javascript prototype __proto__区别

    An Object's __proto__ property references the same object as its internal [[Prototype]] (often refer ...

  7. JavaScript 再认识(一):Function调用模式对this的影响

    近来,学习了一下<JavaScript精粹>,读到了函数这章,理清了JavaScript中this在不同调用模式下的指向. 1.Function调用模式:Function是JavaScri ...

  8. 标 题: JavaScript真的要一统江湖了

    http://www.newsmth.net/nForum/#!article/Python/125347?p=4 标  题: JavaScript真的要一统江湖了 发信站: 水木社区 (Fri Se ...

  9. javascript prototype原型链的原理

    javascript prototype原型链的原理 说到prototype,就不得不先说下new的过程. 我们先看看这样一段代码: <script type="text/javasc ...

随机推荐

  1. serializeObject 的应用

    function sendForm() { var invOrderModelWrapper = {}; // 头 var objHeader = $('#invOrderForm').seriali ...

  2. LeetCode OJ——Convert Sorted List to Binary Search Tree

    http://oj.leetcode.com/problems/convert-sorted-list-to-binary-search-tree/ 将一个按照元素升序排列的链表转换成BST.根据自身 ...

  3. 数据结构自己实现——stack

    #define StackSize 100 typedef char DataType; class stack { public: DataType data[StackSize]; int top ...

  4. 安卓WebView在项目中总结

    一.简介 在安卓开发中我们会遇到许多处理网页的功能,以下就是我在实际中用到的分享给大家 1.显示和渲染Web页面 2.可和JavaScript交互调用 二.常用的方法 //激活WebView为活跃状态 ...

  5. js-在url后面添加时间戳清除浏览器打开页面的缓存

    这个解决办法还是在网上搜出来的,我还没有测试呢: 我有想既然可以添加时间戳,那可以添加随机数吗?我感觉是可以的,尽管没有测试过. 2018-3-13 几天前我就这个问题询问过我们的后台,加时间戳能否真 ...

  6. Codeforces 895E Eyes Closed(线段树)

    题目链接  Eyes Closed 题意  两个人玩一个游戏,现在有两种操作: 1.两个人格子挑选一个区间,保证两个的区间不相交.在这两个区间里面各选出一个数,交换这两个数. 2.挑选一个区间,求这个 ...

  7. openfire Android学习(二)----对分组、好友和头像等一些操作

    一.查询所有分组 通过Roster来获取所有分组,Roster可以通过connection.getRoster()来得到. [java] view plaincopy /** * 获取所有组 * *  ...

  8. 更改 vux Tabbar TabbarItem标题下方的文字激活时的颜色

    步骤一: 打开文件build/webpack.base.conf.js, 找到modeule.exports = vuxLoader, 修改如下(并保存) module.exports = vuxLo ...

  9. odoo生产物流

    odoo生产从raw materials location 自动消耗物料,产成品进入到finish productslocation. 而odoo自动产生的MO[manufacture Order], ...

  10. 每天进步一点点——mysql——Percona XtraBackup(innobackupex)

    一.  简单介绍 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非堵塞地备份(对于MyISAM的备份相同须要加表锁).Xt ...