开发编程语言(七):运行execute.c


起步

初步的可运行的已经在github上了:https://github.com/OriginUnion/origin,发现有bug可以留言,供学习而已。

上一篇已经介绍了语法分析并且创建了我们所需要的数据结构,运行函数从main.cORG_interpret(interpreter);开始。

入口运行函数

运行函数的结构如下:

void ORG_interpret(ORG_Interpreter *inter) {
    inter->execute_storage = MEM_open_storage(0);
    org_add_std_fp(inter);
    org_execute_statement_list(inter, NULL, inter->statement_list);
}

第一句创建一个存储器,第二句注册全局变量,STDIN STDOUT STDERR将他们与c语言的标准输入输出进行关联;第三句中,将解析的语句存在inter->statement_list,进行逐句执行。


jQuery源码分析(三):构造器


起步

这篇是对上一篇的一个补充,静态与实例方法共享设计的在上一篇也提过了:

$(".xx").each()    //作为实例方法存在
$.each()           //作为静态方法存在

源码中:

jQuery.fn = jQuery.prototype = {
    each: function( callback, args ) {
        return jQuery.each( this, callback, args );
    }
};

实例方法取于静态方法,这就是静态与实例方法共享设计。所以jQuery通过2个构造器划分2种不同的调用方式一种是静态,一种是原型。


jQuery源码分析(二):无new构建原理


起步

jQuery里面,你既可以用$.isArray()调用jq的静态方法,也可以通过$().css()获取对象执行对象方法。

在js中,要实现一个变量既能被new,又能调用它的方法,其实不难实现:

var a = function () {};
a.func = function () {alert("静态方法");};
a.prototype.t = function () {alert("对象方法");};

var t = new a();
t.t();
a.func();