十五的学习日记20161005

十五的学习日记20161005

JavaScript

对象创建方法:

  • new方法和原理
function C(){},c=new C;
<=>
c={},C.call(c),Object.setPrototypeOf(c,C.prototype)
  • Object.create()方法(注意只用在构造函数的扩展上!!!)
//Shape - superclass
function Shape() {
  this.x = 0;
  this.y = 0;
}

Shape.prototype.move = function(x, y) {
    this.x += x;
    this.y += y;
    console.info("Shape moved.");
};

// Rectangle - subclass
function Rectangle() {
  Shape.call(this); //call super constructor.
}

Rectangle.prototype = Object.create(Shape.prototype);

var rect = new Rectangle();

rect instanceof Rectangle //true.
rect instanceof Shape //true.

rect.move(1, 1); //Outputs, "Shape moved."

你不知道的JS第二册
第一章
JavaScript语法深入
内核分三个部分: 编译器-作用域-执行引擎
RHS和LHS,有区别.
当右值引用查询失败,会抛出引用错误

程序编译执行的三个基本步骤:

  • 标记与词法: 将代码从字符串转到机器语义明确的位置
  • 语法分析: 将标记生成语法树(AST)
  • 代码执行: 根据AST进行对应操作
    程序编译执行的三个基本角色
  • 引擎: 编译并执行, 贯穿整个流程
  • 编译器: 引擎的朋友,处理底层代码
  • 作用域: 收集保管声明了的变量列表, 规定查找变量的规则.

第二章词法作用域
作用域主要分成两类

  1. 词法作用域
  2. 动态作用域
    词法欺骗: eval和with

第三章 函数与块级作用域
const/let会把变量绑定到任何{}符号内部
catch特殊条件下才能访问

JS除了catch和with还有let外只有函数作用域,没有别的块级作用域.这意味着所有的作用域分层操作都需要由函数来完成.

书中建议不使用匿名函数.
标准模块定义方法:

var a = 2;
(function IIFE( def ){
def( window );
})(function def( global ){
var a = 3;
console.log( a ); // 3
console.log( global.a ); // 2
});
posted @ 2016-10-06 14:21  napretep  阅读(73)  评论(0编辑  收藏  举报