日期:2014-05-16  浏览次数:20361 次

javascript_core阅读笔记(五)
本系列内容是阅读javascript_core的笔记,原文见http://abruzzi.iteye.com/

22. javascript支持构造器形式的对象创建。构造器会自动为新创建的对象设置原型对象,此原型对象通过构造器的prototype属性来引用。
function Task(id) {
	this.id = id;
}

Task.prototype.status = "STOPPED";
Task.prototype.execute = function(args) {
	return "execute task_" + this.id + "[" + this.status + "]:" + args;
}

var task1 = new Task(1);
var task2 = new Task(2);

task1.status = "ACTIVE";
task2.status = "STARTING";

alert(task1.execute("task1"));
alert(task2.execute("task2"));

下图说明了此原型链的结构:


23. 执行期上下文的概念贯穿于javascript引擎解释代码的全过程,这个概念是一个运行期的概念。执行期上下文一般实现为一个栈。按照ECMAScript的规范,一共有三种类型的代码,全局代码(游离于任何函数体之外)、函数代码、以及eval代码

24. 作用域链与原型链类似,也是一个对象组成的链,用以在上下文中查找标识符(变量,函数等)。查找时也与原型链类似,如果调用对象(更标准的名称是活动对象,Activation Object)本身具有该变量,则直接使用变量的值,否则向上层搜索,直到查找到或者返回undefined。
作用域链的主要作用是查找自由变量,所谓自由变量是指,在函数中使用的,非函数内部局部变量,也非函数内部定义的函数名,也非形式参数的变量。这些变量通常来自于函数的“外层”或者全局作用域,比如在函数内部使用的window对象及其属性
var topone = "top-level";

(function outter() {

	var middle = "mid-level";

	(function inner() {
		var bottom = "bot-level";
		alert(topone + ">" + middle + ">" + bottom);
	})();

})();



25. this是执行期上下文对象的属性,因此在代码中使用this,其值直接从上下文对象中获得,无需查找作用域链,其值在进入上下文的那个时刻被确定。

26. 在javascript中,函数对象的创建和函数本身的执行是完全不同的两个过程