• 元语言基础技术之:在JS中如何自由地创建函数


    在前面讲元语言

    http://blog.csdn.net/aimingoo/archive/2008/07/25/2707504.aspx

    http://blog.csdn.net/aimingoo/archive/2008/07/25/2709638.aspx

    的过程中,有些技术细节就忽略了。其中之一,就是这个创建函数的方法。这里开个小主题来讲讲。

    在JS里面,我们可以用任意方法来构建对象,包括直接量和构造器。在使用构造器时,也可以有基于原型和基于属性抄写两种方法(以及这两种方法混用)。下面的例子简要地说明这些对象的构造方法:

    对象创生的方法很多也很灵活,而且灵活应用,还能产生更加复杂的技术方法。但作为JS另外一半的“函数”,它的创生方法就不那么方便了。它只有两种方法:

    注意这里的创建函数,在JS中,有且仅有这样一种语法能“动态地”创建出一个函数来。然而,如果我们试图对创建函数的过

    程加以控制,那么就极为不便了——我们没有什么办法来“得到”一个函数。这个问题,我曾经在另外一篇博客文章中讨论过:

    http://blog.csdn.net/aimingoo/archive/2006/03/25/638092.aspx

    简而言之,我就是想要实现一个构造器——类似于Function。这个构造器能像创建对象一样,创建出函数了。这与元语言系统之间的关系在于:有了“能创建函数的函数”,就等于有了“元函数”。而“元函数+元数据(元类、元对象、基元类型)”就构成了一个完整的元语言系统——其中“基元类型”也就是值类型。

    那么,如何构造出一个函数呢?

     

    其实这个技巧与Function的使用有关。大家都知道Function()的用法是这样:

    但可能没几个人想过,Function也可以象下面这样使用:

    O!居然可以这样吗?哈哈,是的。而且,这样一来,我们可以自由地处理函数的创建参数、以及写自己的“元函数”。

    简单地说,我们可以这样写:

    我们也可覆盖系统的Function函数,以使得它对参数做一些预处理:

    由于上述性质,我们可以构建任意复杂的“函数+对象”系统。而更深层面的意义在于:“函数+对象”实际上映射了“算法+数据结构”两个方面的性质,因此,从JS的元语言系统开始,我们可以构建任意复杂的语言,或者任意复杂的执行系统。

  • 相关阅读:
    NX二次开发-UF_MODL_ask_angle_tolerance获取建模的角度公差
    NX二次开发-UF_MODL_create_bplane创建有界平面
    NX二次开发-UF_MODL_ask_point_containment获取一个点是在体(面,边)的边界内部,外部,还是边界上
    NX二次开发-UFUN获取相邻面UF_MODL_ask_adjac_faces
    NX二次开发-UFUN链表UF_MODL_create_list等用法
    NX二次开发-UFUN发射线函数UF_MODL_trace_a_ray的用法
    NX二次开发-Ufun C函数例子目录【更新日期2020.7.5】
    NX二次开发-C++time函数计时
    NX二次开发-C++的vector用法
    关于C++里set_intersection(取集合交集)、set_union(取集合并集)、set_difference(取集合差集)等函数的使用总结
  • 原文地址:https://www.cnblogs.com/encounter/p/2188632.html
Copyright © 2020-2023  润新知